shell指令碼專家指南筆記#6_測試變數和設定預設值
##
# 本文為《shell指令碼專家指南》一書的學習筆記。
##
6. 測試變數和設定預設值
6.1. 設定預設值
設定變數預設值的幾種形式,複雜程度遞減。
#
if [ -z "$var" ]; then
var="default"
fi
#
[-z "$var" ] && var="default"
#
[ ! "$var" ] && var="default"
#
[ "$var" ] || var="default"
6.2. 變數替換
:= 句法
如果var已定義,且為非空值,則直接返回var的值。
否則為var賦值default,並且返回default。
var=""
echo ${var:="default"} # 輸出default 。
echo $var # 輸出default 。
= 句法
若var已定義,則直接返回var的值。
否則為var賦值default,並且返回default。
var=""
echo ${var="default"} # 輸出空。
echo $var # 輸出空。
unset var
echo ${var="default"} # 輸出default 。
echo $var # 輸出default。
:- 句法
如果var已定義,且為非空值,則直接返回var的值。
否則直接返回default,且不會為var賦值。
var=""
echo ${var:-"default"} # 輸出 default 。
echo $var # 輸出空。
- 句法
如果var已定義,則直接返回var的值。
否則直接返回default,且不會為var賦值。
var=""
echo ${var-"default"} # 輸出空。
echo $var # 輸出空。
unset var
echo ${var-"default"} # 輸出default 。
echo $var # 輸出空。
:? 句法
如果var已定義,且為非空值,則直接返回var的值。
否則指令碼退出並返回行號和判斷公式。 # 原文說會列印default,但是實際測試,會列印“var: default”。
var=""
echo ${var:?default} # 顯示格式 指令碼名 行號 判斷語句。例:test.sh: line 3: var: default
? 句法
如果var已定義,則直接返回var的值。
否則指令碼退出並返回行號和判斷公式。
var=""
echo ${var?default} # 輸出空。
unset var
echo ${var?default} # 指令碼退出,列印行號。
:+ 句法
當var未定義,或var為空值時,直接返回var的值。
否則返回default,且不會為var賦值。
var="var"
echo ${var:+"default"} # 輸出default。
var=""
echo ${var:+"default"} # 輸出空。
+ 句法
當var未定義時,直接返回var的值。
否則返回default,且不會為var賦值。
var="var"
echo ${var+"default"} # 輸出var。
unset var
echo ${var+"default"} # 輸出default。
上述句法的區別和用法小結。
: 句法,主要用於判斷變數是否為空變數,如果變數為非空,則返回變數的值。
= 和 - 句法,兩者的返回值一致,區別在於 = 會為變數賦值,而 - 不會。
- 和 + 句法,兩者判斷互為反轉,- 返回值和 + 返回值互相顛倒。
= 句法,可以用來做變數賦值操作。
+ - 句法,可以在指令碼中組合,來做變數的判定和定義工作。
? 句法,可以用來做變數的判斷,並且可以輸出錯誤資訊。