Переменные в Bash. Передача значений по-умолчанию ${var:-defaultvalue}, замена значений ${var:+alternatevalue} и сообщений – ${var:?message}
Использование значений по-умолчанию в переменных – ${var:-defaltvalue} и ${var-defaltvalue}
Конструкция ${var:-defaltvalue} позволяет выполнять проверку – имеется ли значение у переменной, и задана ли переменная вообще. Если нет – то будет присвоено значение “defaltvalue“.
Примеры:
2 |
$ echo ${var:-defaltvalue} |
Удалим значение перемеренной:
2 |
$ echo ${var:-defaltvalue} |
Допустимо использование функций для определения default-значения, например:
2 |
$ echo ${var:-$(whoami)} |
2 |
$ echo ${var:-$(whoami)} |
Или так:
1 |
$ echo ${var:-`whoami`} |
Использование этой же конструкции, но без указания двоеточия “:” вызовет только проверку имеется ли переменная вообще, но без проверки её содержимого, например:
2 |
$ echo ${var-defaltvalue} |
Удалим переменную:
2 |
$ echo ${var-defaltvalue} |
Использование альтернативных значений для переменных – ${var:+alternatevalue} и ${var+alternatevalue}
В отличии от предыдущей конструкции, +alternatevalue выполняет проверку на наличие переменной и её значения, и только в случае положительного результат – выполняет замену.
При использовании с двоеточием – будет выполнена проверка только на наличие значения в переменной:
2 |
$ echo ${var:+alternatevalue} |
Если значение у переменной имеется – оно будет заменено на alternatevalue:
2 |
$ echo ${var:+alternatevalue} |
Без двоеточия – замена будет выполнена, если переменная задана, даже если у неё нет значения:
2 |
$ echo ${var+alternatevalue} |
2 |
$ echo ${var+alternatevalue} |
2 |
$ echo ${var+alternatevalue} |
Использование значений по-умолчанию в переменных – ${var:=defaultvalue} т ${var=defaultvalue}
Эти конструкции выполняют почти те же действия, что и ${var:-defaltvalue} и ${var-defaltvalue}.
С пустой переменной:
2 |
$ echo ${var:-defaultvalue} |
2 |
$ echo ${var:=defaultvalue} |
Переменная, содержащая значение:
2 |
$ echo ${var:-defaultvalue} |
2 |
$ echo ${var:=defaultvalue} |
С отсутствующей переменной:
2 |
$ echo ${var:-defaultvalue} |
2 |
$ echo ${var:=defaultvalue} |
Разница между ними заключается в том, что -defaultvalue выполняет подстановку значения, тогда как =defaultvalue – устанавливает значение переменной:
2 |
$ echo ${var:-defaultvalue} |
2 |
$ echo ${var:=defaultvalue} |
Однако – =defaultvalue не может быть использован с позиционными и другими специальными аргументами:
1 |
$ var () { a=${1:-defaultvalue}; printf "$an"; }; var |
1 |
$ var () { a=${1:=defaultvalue}; printf "$an"; }; var |
2 |
-bash: $1: cannot assign in this way |
Вывод сообщения об ошибке – ${var:?message} и ${var?message}
Проверка на наличие переменной и значения в ней:
2 |
$ echo ${var:?Var can't be empty} |
3 |
-bash: var: Var can't be empty |
2 |
$ echo ${var?Var must be declared} |
3 |
-bash: var: Var must be declared |