ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

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.

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

 

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

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

${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имвол ! перед именем переменной вызывает замену обычного имени переменной, но затем использует имя этой строки для поиска соответствующей переменной.

Так же:

 

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

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

${#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 по расширению переменных.

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

Exit mobile version