bash 中的 if 条件获取太多参数

bash 中的 if 条件获取太多参数

我对 bash 几乎是新手。如果这个问题在其他地方得到了回答,我很抱歉,但我没有找到任何我能理解的内容。

我正在做一个 if 条件:

if [ $inputstring = $INPUT ]

这一行给了我一个“参数太多]错误”。我也尝试过:

  if [ "$inputstring" = "$INPUT" ]

但是当我确定变量具有相同的值(通过回显)时,我的程序不会进入“if”内部。

有人可以帮忙吗?谢谢

答案1

如果变量包含空格,您将得到“太多参数”,这将导致未加引号的扩展拆分为多个单词。因此,实际上,您必须引用其中的所有变量[ .. ]以防止这种情况发生。

if您编写的第二个( ) 是正确的,并且如果两个变量确实包含相同的数据,if [ "$inputstring" = "$INPUT" ]则将运行 的主分支。if但根据它们的来源,它们中可能会有额外的空白,或者其他难以看到的东西。使用egprintf "<%q>\n" "$INPUT"以明确的格式查看变量内容。 (输出格式取决于变量的值,但通常它会打印引用的值和/或显示带反斜杠转义的特殊字符。)

例如,这里的变量不包含相同的数据,后者有一个尾随空格:

$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >

相关内容