korn shell错误[:缺少`]'

时间:2017-02-26 01:05:28

标签: shell sh ksh

我正在学习基于Bourne shell的Korn shell。下面是我非常简单的代码。

read ab
if [ $ab = "a" || $ab = "A" ] ; then
    echo hi
fi

由于某种原因||运算符给我错误:

[: missing `]'
a: command not found

2 个答案:

答案 0 :(得分:3)

编写if条件的正确方法是:

read ab
if [ "$ab" = "a" ] || [ "$ab" = "A" ]; then
  echo hi
fi

使用[ ... ]时,必须将变量放在双引号中。否则,如果变量展开为空或者扩展包含空格,则shell将失败并出现语法错误。

另见:

答案 1 :(得分:1)

如果您使用ksh或现代bash,则可以使用非标准[[ ... ]]代替[ ... ]

这有两个好处:

  1. 您可以在|| ... [[
  2. 中使用]]
  3. 变量扩展不需要引号。
  4. 这使得编写

    更安全,更短
    [[ $ab = a || $ab = A ]]