在Bash中比较两个字符串时出现"command not found"错误

Eps*_*pha 50 string syntax bash if-statement compare

我的整个脚本目前是这样的:

#!/bin/sh   
clear;   
blanko="";   
# Dummy-Variablen
variable=Testvariable;   
if [[$variable == $blanko]];
then   
  echo "Nichts da!"   
else   
  echo $variable   
fi
Run Code Online (Sandbox Code Playgroud)

如果我进入

TestSelect.sh
Run Code Online (Sandbox Code Playgroud)

我明白了

/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found   
Testvariable
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

anu*_*ava 102

这是个问题:

if [[$variable == $blanko]];
Run Code Online (Sandbox Code Playgroud)

方括号内需要空格,使用方式如下:

[[ "$variable" == "$blanko" ]] && echo "Nichts da!" || echo "$variable"
Run Code Online (Sandbox Code Playgroud)

  • 十分感谢。在德国,我们有一句谚语:“我看不到森林,因为树木” (3认同)
  • @EpsilonAlpha:英语有同样的说法:"[我]看不到森林里的树木". (3认同)
  • 但请注意,无需对变量引用加双引号(即使值嵌入了空格)。 (2认同)
  • @mklement0:只是为了良好的实践,我总是引用它们,可能并不总是需要。 (2认同)
  • 因为 bash 在缺乏正确语法的情况下将其解释为命令 (2认同)

cod*_*ter 8

在相关的说明中,还需要空格[ ]:

if [ "$variable" = "$blanko" ]; then
  # more code here
fi
Run Code Online (Sandbox Code Playgroud)

请注意,变量确实需要用双引号括起来,[ ]以防止单词拆分和通配.当没有设置任何被比较的变量时,双引号也有帮助 - 否则shell会抛出语法错误.

查看以下帖子,了解为什么我们需要空间[ ]:

另一篇相关文章讨论了其他需要空格的语法元素:

最后,约之间的差异这篇文章的会谈[[ ]][ ]:


有关: