Bash
在腳本中使用“${a:-b}”進行變數賦值
我一直在查看其他人編寫的一些腳本(特別是 Red Hat),並且他們的許多變數是使用以下符號分配的,
VARIABLE1="${VARIABLE1:-some_val}"
或者一些擴展其他變數VARIABLE2="${VARIABLE2:-
echo $VARIABLE1}"
使用這種表示法而不是直接聲明值有什麼意義(例如,
VARIABLE1=some_val
)?這種表示法是否有好處或可以避免的可能錯誤?
在這種情況下是否
:-
具有特定含義?
如果另一個變數為空或未定義,則此技術允許為變數分配一個值。**注意:**這個“其他變數”可以是相同的或另一個變數。
摘抄
${parameter:-word} If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
**注意:**此表格也適用,
${parameter-word}
. 如果您想查看 Bash 中可用的所有形式的參數擴展的完整列表,那麼我強烈建議您在 Bash Hacker 的 wiki 中查看名為“參數擴展”的主題。例子
變數不存在
$ echo "$VAR1" $ VAR1="${VAR1:-default value}" $ echo "$VAR1" default value
變數存在
$ VAR1="has value" $ echo "$VAR1" has value $ VAR1="${VAR1:-default value}" $ echo "$VAR1" has value
可以通過評估其他變數或在符號的預設值部分中執行命令來完成相同的操作。
$ VAR2="has another value" $ echo "$VAR2" has another value $ echo "$VAR1" $ $ VAR1="${VAR1:-$VAR2}" $ echo "$VAR1" has another value
更多範例
您也可以使用稍微不同的符號,它只是
VARX=${VARX-<def. value>}
.$ echo "${VAR1-0}" has another value $ echo "${VAR2-0}" has another value $ echo "${VAR3-0}" 0
在上面
$VAR1
&$VAR2
已經用字元串“有另一個值”定義但$VAR3
未定義,所以使用預設值代替,0
.另一個例子
$ VARX="${VAR3-0}" $ echo "$VARX" 0
:=
使用符號檢查和分配最後我會提到方便的運算符,
:=
. 如果被測變數為空或未定義,這將進行檢查並賦值。例子
請注意,
$VAR1
現在已設置。操作員:=
在一次操作中完成了測試和分配。$ unset VAR1 $ echo "$VAR1" $ echo "${VAR1:=default}" default $ echo "$VAR1" default
但是,如果該值是事先設置的,那麼它就會被單獨留下。
$ VAR1="some value" $ echo "${VAR1:=default}" some value $ echo "$VAR1" some value
方便的花花公子參考表
這使得賦值和替換之間的區別變得明確:賦值為變數設置了一個值,而替換沒有。
參考