【发布时间】:2017-07-16 18:08:58
【问题描述】:
我正在学习基于 Bourne shell 的 Korn shell。下面是我非常简单的代码。
read ab
if [ $ab = "a" || $ab = "A" ] ; then
echo hi
fi
由于某种原因,|| 操作员给了我错误:
[: missing `]'
a: command not found
【问题讨论】:
-
||由 shell 解释,而不是由[命令解释(是的,[是一个命令)。所以[是用参数$ab = "a"调用的,它抱怨缺少]。您可以使用-o,这是[的“或”命令,但@codeforester 中的方法可能是更好的方法。 -
@KeithThompson - 我了解到
-o在更新的 Bash 版本中已被弃用。虽然不确定 ksh。 -
@codeforester,实际上是 POSIX 规范将其标记为过时,而不是任何特定的外壳。
-
如果您使用
test,这些问题确实会变得不那么常见:if test "$ab" = a || test "$ab" = A; then ...不太容易出错。 -
您对引号的使用完全是倒退的。不需要引用字符串
a,但有充分的理由引用"$ab"