2014-02-13 18 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} 

如果第一個命令行參數給出,而不是null,則此設置選項,第一個命令行參數。否則,它將選項設置爲默認值。有關參數擴展的詳細信息,請參閱Bash reference manual以及此表單的一些有用變體。

+2

「請注意,如果您使用顯式空的第一個參數調用腳本,則該行爲可能與問題中的代碼有所不同。」不,它不會,因爲你使用了冒號。如果你編寫'$ {1-default}',那麼它將區分未設置和已設置但空的參數。 –

+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'有一個缺點 - 如果設置了-e'設置... – anishsane

+0

@anishsane就'set -e'而言,'[.. 。] && command'與'if [...]相同;然後命令; fi'。 ''[']'命令可以安全地失敗,'command'如果運行失敗則會退出shell。 – chepner