Содержание
Использование значений по-умолчанию в переменных — ${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]