我对 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\ >