2015-12-08 94 views
0

我看到一些的bash腳本(在GNU bash中,版本51年2月3日(1))與一個參數替換像

function foo() { 
    local x=${1-XYZ} ##### (1) 
    echo "x=${x}." 
} 
foo ####### this prints x=XYZ 
foo ABCD ###### this prints x=ABCD 

更常見的是我在(1)x=${1:-XYZ}處看到,我可以在Bash參考頁面here中找到它。都是正確的,還是在後臺發生了其他事情,在某些情況下可能會失敗?

它不一定是$1 - 只要${XX-sub}中的變量沒有定義,它就會選擇替代品。 非常感謝

回答

2

如果沒有設置value,使用default,否則,使用value

var=${value-$default} 
var=${value:-$default} # ':' use default even if value declared and empty/null 

如(缺少命令行參數):

value= 
var=${value-$default}  # not set 
var=${value:-$default} # set to $default 
2

不同的是,-用途如果參數未設置(即未定義),並且使用該參數的備用值未設置或爲空(即設置爲空字符串)。例如:

$ foo() { 
> echo "Argument 1 with :- is '${1:-altval}', with just - is '${1-altval}'" 
> echo "Argument 2 with :- is '${2:-altval}', with just - is '${2-altval}'" 
> } 
$ foo "" 
Argument 1 with :- is 'altval', with just - is '' 
Argument 2 with :- is 'altval', with just - is 'altval' 

這裏我通過一個(空)參數的功能,所以$1設置爲null,但$2被清除的。

0

${var-word}如果var未定義,則返回「字」。如果不是,則返回$ {var}。 ${var:-word}如果var爲空或未定義,則返回「字」。如果不是,則返回$ {var}。

您可以使用此示例腳本輕鬆檢查差異。

#!/bin/bash 
var1="" ## var1 is Null 
#var2= ## var2 is undefined 
var3="value3" ## var3 is set 

echo '${var1}': ${var1} "(NULL)" 
echo '${var2}': ${var2} "(Undefined)" 
echo '${var3}': ${var3} 

echo '${var1-foo}': ${var1-foo} 
echo '${var2-foo}': ${var2-foo} 
echo '${var3-foo}': ${var3-foo} 

echo '${var1:-foo}': ${var1:-foo} 
echo '${var2:-foo}': ${var2:-foo} 
echo '${var3:-foo}': ${var3:-foo} 

此腳本輸出。

${var1}: (NULL) 
${var2}: (Undefined) 
${var3}: value3 
${var1-foo}: 
${var2-foo}: foo 
${var3-foo}: value3 
${var1:-foo}: foo 
${var2:-foo}: foo 
${var3:-foo}: value3