参数替换

参数替换

我想知道 Linux 中以下两个参数替换选项之间的区别。

echo ${MESG:? "HI"}
echo ${MESG:- "HI"}

他们似乎都在做同样的事情。

答案1

bash手册(POSIX 标准有类似的措辞):

${parameter:-word}使用默认值。如果未设置或为 null,则替换parameter的扩展。否则,将替换word的值 。parameter

${parameter:?word}如果为空或未设置则显示错误。如果parameter为 null 或未设置,则 的扩展word(或者如果不存在则显示一条消息word)将写入标准错误,并且 shell(如果不是交互式的)将退出。否则,parameter 将替换的值。

如果您的MESG变量是非空字符串,它们会执行相同的操作(扩展到变量的值MESG)。如果它为空或根本没有设置,则将${MESG:-HI}被字符串替换HI,并${MESG:?HI}显示HI标准错误并退出当前 shell 会话(除非它是交互式会话)。

答案2

如果未设置 MESG,则

echo ${MESG:?}

会打印

MESG: parameter null or not set


echo ${MESG:-}

会打印

<empty string>

这 ?并且 - 因此决定了如何处理 null 或未设置的变量

相关内容