【问题标题】:Command not found when comparing string比较字符串时找不到命令
【发布时间】:2012-02-15 14:36:43
【问题描述】:

我有这个脚本

#!/bin/sh        
if [ $# -ne 3 ] ; then
            echo "param 1, param2, and A or B "
            exit 1;

    elif [ $# -eq 3 ]; then
                    if [$3 = "A"] ; then
                                    echo "A"
                    elif [$3 = "B"]; then
                                    echo "B"
                    fi

fi

它基本上是检查参数 3 是 A 还是 B,然后做 echo。但它返回:

./test.sh: line 6: [A: command not found
./test.sh: line 8: [A: command not found

我尝试使用-eq 进行比较,但还是不行。我该如何解决这个问题?

【问题讨论】:

  • 您不需要 elif [ $# -eq 3 ]; then 行,因为您知道 $# 在您的第一次测试中为 3。然后,您可以避免一级缩进和fiif [$3 = "A"] ; then 替换为elif [$3 = "A"] ; then

标签: shell


【解决方案1】:

我确信这已经出现过,但是 -- [ 实际上是一个命令。 [ 后面需要一个空格,以便 shell 找到它。

【讨论】:

  • 谢谢,我会在 9 分钟后接受这个(因为堆栈溢出不允许我接受)​​
  • 您需要空格的原因是外壳程序通过在有一个或多个空格和/或制表符的地方将其拆分来标记行。如果 [ 之后没有空格,则它不是单独的标记。与 ] 类似,虽然 test 命令忽略了那个,但是如果前面没有空格,它会干扰比较
猜你喜欢
  • 2021-03-09
  • 2013-11-13
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多