Поиск по сайту:

Надежда — хороший завтрак, но плохой ужин (Ф. Бэкон).

Необычные способы использования переменных внутри сценариев Bash

4 мин для чтения
FavoriteLoadingДобавить в избранное
21 ноября 2021
Bash Heredoc
Возможно, вы раньше использовали переменные в Bash, но, вероятно, не так.
Вы, вероятно, знаете о переменных в сценариях оболочки Bash.

Как и другие языки программирования и сценариев, вы используете переменные для хранения данных, а затем ссылаетесь на них в будущих командах.

name="Linux AndreyEx"
echo "Hello $name!"

 

И он напечатает «Hello Linux AndreyEx!».

Помимо приведенного выше примера, есть также удивительно большое количество вещей, которые вы можете делать с переменными, например, заполнение значения по умолчанию, когда переменная не установлена, и присвоение нескольких значений одной переменной.

Позвольте нам  показать вам необычное и продвинутое использование переменных в сценариях bash.

 

Использование массивов

За исключением приведенного выше примера, наиболее распространенным типом переменных, которые вы найдете в Bash, являются массивы:

name=("Linux AndreyEx" "It's FOSS")

 

Приведенный выше пример присваивает так Linux AndreyExи в It’s FOSSкачестве значений для nameпеременной.

Но как вы подходите к доступу к каждому значению?

Если вы бежите echo $name, вы увидите, что он печатает первое значение, Linux AndreyEx. Чтобы получить доступ к другим значениям, вам нужно использовать другой синтаксис для переменных.

Чтобы начать извлекать другие значения, давайте начнем со следующего:

echo "Hello ${name}!"

 

Это основа того, что позволит вам получить все значения переменных, а также то, что позволит вам выполнять остальные методы взаимодействия с переменными на протяжении всей остальной части этой статьи.

Возвращаясь к вышеупомянутому примеру, вы можете использовать синтаксис  ${variable[number]} для извлечения определенного элемента из переменной:

echo "Hello ${name[1]}!"

 

Это напечатает “Hello It’s FOSS!”

Если вы еще не видели из приведенного выше примера, первый элемент в массиве фактически начинается с 0, а не с 1.

Итак, чтобы вытащить Linux AndreyExзначение, вы должны потянуть элемент в позиции 0:

echo "Hello ${name[0]}!"

 

Аналогичным образом, простое опускание части  [number] просто делает ее по умолчанию первым элементом в массиве (который имеет индекс 0).

Индекс просто означает позицию элемента в массиве. Точно так же индекс 0 – это элемент 0 внутри массива.

И они составляют все типы переменных, которые вы действительно найдете внутри Bash.

Читать  Как включить статистику Haproxy с графическим интерфейсом просмотра на Linux

Давайте теперь перейдем к тому, как вы действительно можете работать и изменять вывод этих переменных, когда мы их вызываем.

 

Установка значения, когда переменная не установлена

Вы можете вернуть переменную по умолчанию к определенной строке, если переменная не установлена ​​следующим образом:

${variable:-string}

 

Возьмем этот пример:

echo "Hello ${name:-nobody}!"

 

Поскольку переменная nameне установлена, она будет установлена ​​по умолчанию, nobodyи приведенная выше команда напечатает “Hello nobody!”.

Если переменная установлена ​​заранее, будет использовано ее значение:

name="Linux AndreyEx"
echo "Hello ${name:-nobody}!"

 

Приведенная выше команда выводит «Hello Linux AndreyEx!»

 

Установка значения, когда переменная будет уже установлена

Вы также можете установить переменную вернуть определенное значение, когда переменная будет установлена. Это приведет к тому, что переменная будет печатать определенную строку всякий раз, когда она установлена, и ничего не печатать, когда это не так.

Синтаксис этого метода аналогичен предыдущему, но вместо + используется знак -.

${variable:+string}

 

Возьмем этот пример, где имя переменной не задано. Таким образом, он не будет ничего печатать для этой переменной части, и вывод команды будет “Hello!”

echo "Hello ${name:+person}!"

 

Измените приведенный выше пример и установите переменную name. С помощью этого специального метода он не будет использовать уже установленное значение, а будет использовать то, которое вы указали.

name="Linux AndreyEx"
echo "Hello ${name:+person}!"

 

Вышеупомянутая команда напечатает “Hello person!”.

Вероятно, вы найдете больше вариантов использования синтаксиса ${variable:-string}, поскольку некоторые из преимуществ ${variable:+string} уже могут быть достигнуты с помощью других инструментов, таких как оператор [] testing():

 

Косвенные ссылки на переменные

В следующем примере будет использоваться следующий синтаксис:

${!variable}

 

Этот вариант немного сложнее в том, как он работает, но он становится понятным после того, как вы увидите, как он работает:

name="Linux AndreyEx"
variable="name"

echo "Hello ${!variable}!"

 

Он напечатает «Hello Linux AndreyEx».

Cимвол ! перед именем переменной вызывает замену обычного имени переменной, но затем использует имя этой строки для поиска соответствующей переменной.

Читать  Как перезапустить оболочку GNOME из командной строки, не закрывая никаких приложений (только X11)

Так же:

  • variable заменяется на строку name, за которой следует:
  • name заменяется на его значение Linux AndreyEx.

 

Нахождение длины переменной

Воспользуемся предыдущим методом, но заменим символ ! на #:

${#variable}

 

При использовании этого метода будет напечатана длина переменной, но будет немного отличаться в зависимости от того, является ли переменная строкой или массивом.

Использование этого синтаксиса в строке приведет к замене переменной количества символов в строке.

variable="name"
echo "Length is ${#variable}."

 

Он выдаст 4. Но, с другой стороны, при использовании его в массиве будет напечатано количество элементов внутри массива, то есть размер массива, который здесь равен 2.

variable=("name" "word")
echo "Length is ${#variable}."

 

Строки в нижнем и верхнем регистре

И, наконец, вы можете извлечь выгоду и строчные буквы строки с использованием операторов ^ и, соответственно.

Вы указываете их в конце имени переменной следующим образом:

# Заглавные буквы
${variable^}
${variable^^}

# Нижниq регистр
${variable,}
${variable,,}

 

В чем разница между одним и двумя персонажами?

Указание только одного ${variable^} приведет к изменению только первой буквы, а указание двух ( ${variable^^}) приведет к изменению всей строки.

В приведенном ниже примере печатается Name вместо name:

variable="name"
echo "${variable^}"

 

Но этот печатает NAME:

variable="name"
echo "${variable^^}"

 

Точно так же вы можете печатать переменные в нижнем регистре.

В приведенном ниже примере будет напечатано wIDEname:

variable="WIDEname"
echo "${variable,}"

 

И этот напечатает widename:

variable="WIDEname"
echo "${variable,,}"

 

Подведение итогов

Это лишь некоторые из способов использования переменных внутри Bash. Вы можете найти еще несколько способов взаимодействия с переменными в документации Bash по расширению переменных.

Есть вопросы о том, как работали приведенные выше примеры, или что-то просто не работает? Не стесняйтесь оставлять любые из них в разделе комментариев ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close