Bash:测试字符串,包括美元符号

Bash:测试字符串,包括美元符号

有人可以解释测试命令中美元符号 $ 的奇怪行为吗?

[ "$a" != "$b" ]
echo $?
1
[ "$a" != "b" ]
echo $?
0

为什么test "$a" != "$b" 返回 1 而不是 0?

答案1

$是 bash 中的一个特殊字符,可用于扩展参数,例如变量或特殊参数(例如$?.如果你想在双引号字符串中使用它,你需要用一个转义\

$ [ "\$a" != "\$b" ]
$ echo "$?"
0

或者使用单引号(其中没有字符被特殊处理)而不是双引号:

$ [ '$a' != '$b' ]
$ echo "$?"
0

答案2

由于测试表达式使用双引号中的$aand $b,因此 shell 会将它们解释为变量并用它们的值替换它们。

在您的代码中,变量ab很可能未设置。这意味着$a$b将是相同的值(空字符串)。因此该"$a" != "$b"测试将是错误的 (1)。

如果您想比较字符串 $a$b,例如使用单引号而不是双引号:

if [ '$a' != '$b' ]; then ...; fi

这将保护字符串免受变量扩展的影响。

相关内容