2017-03-06 141 views
0

我正在关注变量变换的this教程。

如果我有以下几点:

echo ${TEST:-test} #TEST is undefined, 'test' is printed and TEST is still undefined. 
echo ${FOO:?"some text"} #"some text" is printed and FOO is still undefined. 

是什么':-'及以上':?'之间的区别?

+1

你在这里有你的答案:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html – codeforester

回答

1

这些是测试快捷方式:

echo ${TEST:-test} 

如果$TEST存在,那么将使用它的值,否则将被使用的$test值。如果你想TEST要设置那么你可能需要:

echo ${TEST:=test} 

下一个:

echo ${FOO:?"some text"} 

如果$FOO设置,那么使用它的值,否则输出到stderr错误消息“一些文本”(默认为“参数为空或未设置”)。

+2

稍作更正:':'和':='将同时使用如果设置了“TEST”,则为备用值,但是为空字符串。 '$ {TEST-test}'和'$ {TEST = test}'将保留空字符串,如果这是'TEST'之前明确设置的。 '$ {FOO:?}'同样会打印错误信息,如果设置了'FOO'但是为空字符串;如果一个空值是有效的,使用'$ {FOO?error}'。 – chepner

相关问题