【问题标题】:Getting "command not found" error while comparing two strings in Bash在 Bash 中比较两个字符串时出现“找不到命令”错误
【发布时间】:2013-11-13 01:08:57
【问题描述】:

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

#!/bin/sh   
clear;   
blanko="";   
# Dummy-Variablen
variable=Testvariable;   
if [[$variable == $blanko]];
then   
  echo "Nichts da!"   
else   
  echo $variable   
fi

如果我输入了

TestSelect.sh

我明白了

/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found   
Testvariable

我该如何解决这个问题?

【问题讨论】:

  • 未来提示:shellcheck 会自动指出这个和其他基本问题。
  • 谢谢,通过我的所有搜索,我没有找到这个网站。 :-)
  • 另一个指针:如果你将 多个 语句放在一行上,你只需要一个语句终止 ;
  • [[$variable$blanko]] 之间需要空格

标签: string bash if-statement syntax compare


【解决方案1】:

这是个问题:

if [[$variable == $blanko]];

方括号内需要空格,这样使用:

[[ "$variable" == "$blanko" ]] && echo "Nichts da!" || echo "$variable"

【讨论】:

  • 非常感谢。在德国,我们有一句谚语:“我看不到森林,因为有树”
  • 但是请注意,没有必要对变量引用进行双引号(即使值具有嵌入的空格)。
  • @mklement0:为了良好的实践,我总是引用它们,可能并不总是需要。
  • @mklement0 original 这是一个测试变量,因为老实说,我不确定我是否正确描述了一个空字符串。
  • @EpsilonAlpha:英语有同样的说法:“[I] cannot see the forest for the trees”。
【解决方案2】:

在相关说明中,[ ] 周围也需要空格:

if [ "$variable" = "$blanko" ]; then
  # more code here
fi

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

查看以下帖子,了解为什么我们需要在 [ ] 周围留空格:

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

最后,这篇文章讲讲[[ ]][ ]的区别:


相关:

【讨论】:

    【解决方案3】:

    如果您使用诸如if [[ $partition == "/dev/sda2" ]]; then 之类的bash 脚本,只需在脚本顶部使用#!/bin/bash 来比较字符串并运行脚本与./scriptname.shbash scriptname.sh

    【讨论】:

      【解决方案4】:

      如果您的脚本使用/bin/bash 在您的本地运行,但在您的容器上使用sh 没有运行,那么请考虑通过apk add --no-cache bash 将bash 添加到您的容器中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2017-04-09
        • 2022-01-16
        • 2015-12-07
        相关资源
        最近更新 更多