2014-02-13 3 views

ответ

5
default value    : ${parameter:-word} \ 
assign default value  : ${parameter:=word} |_/if unset or null - 
error if empty/unset  : ${parameter:?mesg} | \ use no ":" for unset only 
use word unless empty/unset : ${parameter:+word}/
+1

+1 для тщательного (хотя, может быть, слишком сжатого [отсутствия примеров]) ответ. –

3

Вы можете использовать:

option=${1:-default} 

Это устанавливает параметр для первого параметра командной строки, если первый параметр командной строки был дан, и не нулевые. В противном случае он устанавливает значение по умолчанию. См. Bash reference manual для получения подробной информации о расширении параметров и некоторых полезных вариантах этой формы.

+2

«Обратите внимание, что если вы вызываете свой скрипт с явным пустым первым параметром, это может отличаться от кода в вопросе». Нет, это не так, потому что вы использовали двоеточие. Если вы напишете '$ {1-default}', то он будет различать параметр unset и set, но пустой. –

+0

@RomanCheplyaka, спасибо, подтвердил это в руководстве и отредактировал ответ. – Toxaris

0

Для использования другого, чем присвоение значения по умолчанию, которые Toxaris уже покрыты, то стоит отметить, что существует обратный тест на -z, поэтому вместо

if [[ ! -z "$1" ]]; then 
    do_something 
fi 

вы можете просто написать:

if [ -n "$1" ]; then 
    do_something 
fi 

и если нет else ветви, вы можете сократить его:

[ -n "$1" ] && do_something 
+1

или просто 'if [" $ 1 "]; то ... ' – anishsane

+0

' [-n "$ 1"] && do_something' имеет недостаток - если установлен 'set -e' ... – anishsane

+0

@anishsane Что касается' set -e', '[.. .] && command' совпадает с 'if [...]; затем команда; fi'. Команда '[...]' может с уверенностью выйти из строя, и 'command' выйдет из оболочки, если она запустится и завершится с ошибкой. – chepner

Смежные вопросы