Практическое написание сценариев командной оболочки Bash/Bash подстановки: различия между версиями

Содержимое удалено Содержимое добавлено
Метки: с мобильного устройства из мобильной версии
Нет описания правки
Строка 7:
У простой подстановки есть две формы:
* ''Упрощенная''. В упрощенной форме достаточно после знака доллара написать имя переменной, например <code>$VARIABLE_NAME</code>.
* ''Строгая''. В строгой форме имя переменной нужно поместить в фигурные скобки, например <code>${VARIABLE_NAME}</code>. В таком виде строгая форма ничем не отличается от упрощенной, тем не менее только строгая форма разрешает вам пользоваться встроенными подстановочными операциями — мощным инструментом командной оболочки. Строгая форма, помимо всего прочего, определяет где заканчивается имя подставляемой переменной, так как его границы определены фигурными скобками. Например, сравните:<source lang="bash">
# Положим у нас есть переменные
VAR="Good "
VAR_="Bad "
 
# Значение какой переменной будет подставлено?
echo "$VAR_day"
 
# В данном случае никакой из существующих. Интерпретатор будет пытаться искать переменную VAR_day, которая не определена.
# Чтобы разрешить неоднозначтность, нужно использовать строгую форму, чтобы обозначить границы имени переменной
 
echo "${VAR}day" # "Good day"
echo "${VAR_}day" # "Bad day"
 
# Строгая форма должна всегда использоваться, когда за подстановкой нет разделителя и идет буквенно-цифровой символ или символ
# нижнего подчеркивания (т.е. за подстановкой идет такой символ, который может использоваться в именах переменных).
 
echo "$VAR_$VAR" # "Bad Good". Неоднозначности нет, потому что символ '$' нельзя использовать в имени переменной
echo "$VAR$VAR_" # "Good Bad". Аналогично
 
# Так же неоднозначности нет и здесь
echo "$VAR_%cost" # "Bad %cost"
echo "$VAR&cost" # "Good &cost"
echo "$VAR+cost" # "Good +cost"
# потому что символы %, & и + в данных примерах не могут использоваться в именах переменных.
 
# Тем не менее, использование строгой формы улучшает читаемость кода.
</source>
 
Давайте рассмотрим следующий код.