sci9 Asked: 2018-01-26 05:49:14 +0800 CST2018-01-26 05:49:14 +0800 CST 2018-01-26 05:49:14 +0800 CST Bash:测试字符串,包括美元符号 772 有人可以解释测试命令中美元符号 $ 的奇怪行为吗? [ "$a" != "$b" ] echo $? 1 [ "$a" != "b" ] echo $? 0 为什么test "$a" != "$b" 返回一而不是零? bash string 2 个回答 Voted Best Answer imbuedHope 2018-01-26T05:54:51+08:002018-01-26T05:54:51+08:00 $是 bash 中的一个特殊字符,可用于扩展参数(如变量)或特殊参数(如$?. 如果要在双引号字符串中使用它,则需要使用\ $ [ "\$a" != "\$b" ] $ echo "$?" 0 或者使用单引号(其中没有特殊处理的字符)而不是双引号: $ [ '$a' != '$b' ] $ echo "$?" 0 Kusalananda 2018-01-26T06:06:17+08:002018-01-26T06:06:17+08:00 由于测试表达式在双引号中使用$a和$b,shell 会将它们解释为变量并用它们的值替换它们。 在您的代码中,变量a和b很可能未设置。这意味着$a和$b将是相同的值(空字符串)。因此,"$a" != "$b"测试将是错误的 (1)。 如果要比较字符串 $a和$b,请使用例如单引号而不是双引号: if [ '$a' != '$b' ]; then ...; fi 这将保护字符串免受变量扩展。
$
是 bash 中的一个特殊字符,可用于扩展参数(如变量)或特殊参数(如$?
. 如果要在双引号字符串中使用它,则需要使用\
或者使用单引号(其中没有特殊处理的字符)而不是双引号:
由于测试表达式在双引号中使用
$a
和$b
,shell 会将它们解释为变量并用它们的值替换它们。在您的代码中,变量
a
和b
很可能未设置。这意味着$a
和$b
将是相同的值(空字符串)。因此,"$a" != "$b"
测试将是错误的 (1)。如果要比较字符串
$a
和$b
,请使用例如单引号而不是双引号:这将保护字符串免受变量扩展。