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