MyTetra Share
Делитесь знаниями!
Переменные в Bash. Передача значений по-умолчанию ${var:-val}, замена значений ${var:+val} и сообщений ${var:?msg}
01.02.2019
16:44
Автор: Setevoy
Текстовые метки: linux, bash, консоль, переменная, установка, значение, ${1:-value}, по умолчанию, замена, сообщение
Раздел: Компьютер - Linux - Bash - Программирование на Bash

Переменные в Bash. Передача значений по-умолчанию ${var:-defaultvalue}, замена значений ${var:+alternatevalue} и сообщений – ${var:?message}


Использование значений по-умолчанию в переменных – ${var:-defaltvalue} и ${var-defaltvalue}

Конструкция ${var:-defaltvalue} позволяет выполнять проверку – имеется ли значение у переменной, и задана ли переменная вообще. Если нет – то будет присвоено значение “defaltvalue“.

Примеры:


1

$ var=var


2

$ echo ${var:-defaltvalue}


3

var

Удалим значение перемеренной:


1

$ var=


2

$ echo ${var:-defaltvalue}


3

defaultvalue

Допустимо использование функций для определения default-значения, например:


1

$ var=var


2

$ echo ${var:-$(whoami)}


3

var


1

$ var=


2

$ echo ${var:-$(whoami)}


3

setevoy

Или так:


1

$ echo ${var:-`whoami`}


2

setevoy

Использование этой же конструкции, но без указания двоеточия “:” вызовет только проверку имеется ли переменная вообще, но без проверки её содержимого, например:


1

$ var=


2

$ echo ${var-defaltvalue}


3

$

Удалим переменную:


1

$ unset var


2

$ echo ${var-defaltvalue}


3

defaltvalue

Использование альтернативных значений для переменных – ${var:+alternatevalue} и ${var+alternatevalue}

В отличии от предыдущей конструкции, +alternatevalue выполняет проверку на наличие переменной и её значения, и только в случае положительного результат – выполняет замену.

При использовании с двоеточием – будет выполнена проверка только на наличие значения в переменной:


1

$ var=


2

$ echo ${var:+alternatevalue}


3

$

Если значение у переменной имеется – оно будет заменено на alternatevalue:


1

$ var=var


2

$ echo ${var:+alternatevalue}


3

alternatevalue

Без двоеточия – замена будет выполнена, если переменная задана, даже если у неё нет значения:


1

$ var=


2

$ echo ${var+alternatevalue}


3

alternatevalue


1

$ var=var


2

$ echo ${var+alternatevalue}


3

alternatevalue


1

$ unset var


2

$ echo ${var+alternatevalue}


3

$

Использование значений по-умолчанию в переменных – ${var:=defaultvalue} т ${var=defaultvalue}

Эти конструкции выполняют почти те же действия, что и ${var:-defaltvalue} и ${var-defaltvalue}.

С пустой переменной:


1

$ var=


2

$ echo ${var:-defaultvalue}


3

defaultvalue


1

$ var=


2

$ echo ${var:=defaultvalue}


3

defaultvalue

Переменная, содержащая значение:


1

$ var=var


2

$ echo ${var:-defaultvalue}


3

var


1

$ var=var


2

$ echo ${var:=defaultvalue}


3

var

С отсутствующей переменной:


1

$ unset var


2

$ echo ${var:-defaultvalue}


3

defaultvalue


1

$ unset var


2

$ echo ${var:=defaultvalue}


3

defaultvalue

Разница между ними заключается в том, что -defaultvalue выполняет подстановку значения, тогда как =defaultvalueустанавливает значение переменной:


1

$ var=


2

$ echo ${var:-defaultvalue}


3

defaultvalue


4

$ echo ${#var}


5

0


1

$ var=


2

$ echo ${var:=defaultvalue}


3

defaultvalue


4

$ echo ${#var}


5

12


6

$ echo ${var}


7

defaultvalue

Однако – =defaultvalue не может быть использован с позиционными и другими специальными аргументами:


1

$ var () { a=${1:-defaultvalue}; printf "$an"; }; var


2

defaultvalue


1

$ var () { a=${1:=defaultvalue}; printf "$an"; }; var


2

-bash: $1: cannot assign in this way

 Вывод сообщения об ошибке – ${var:?message} и ${var?message}

Проверка на наличие переменной и значения в ней:


1

$ var=


2

$ echo ${var:?Var can't be empty}


3

-bash: var: Var can't be empty


1

$ unset var


2

$ echo ${var?Var must be declared}


3

-bash: var: Var must be declared


 
MyTetra Share v.0.52
Яндекс индекс цитирования