我刚刚在 ksh 脚本中找到了以下代码:
if [ "${file_id}" = "0" ] || [ "${file_id}" = "100" ] || "${file_id}" = "100" ]
then
# Do some stuff
fi
请特别注意第三个 ${file_id}
之前缺少的 [
。
我很高兴这不是一个非常令人愉快的语法,即使没有那个错误,并且 [[ … ]]
通常比 [ … ]
更可取克什。
但是,这段代码完全按照预期运行,并且 ksh -n
根本不反对上述内容。为什么上面的方法没有失败?
最佳答案
if [ "${file_id}"= "0"] || [“${file_id}”=“100”]|| “${file_id}”=“100”]
该命令从左到右执行。如果此命令发现 file_id
的值为 0
,那么它将不会检查下一个条件,因为这些条件是用 or
运算符分隔的。如果第一个和第二个条件都不满足,那么它将尝试检查第三个条件,但会失败。
file_id=1000
if [ "${file_id}" = "0" ] || [ "${file_id}" = "100" ] || "${file_id}" = "100" ]
then
echo "Exicuted for file_id=$file_id"
fi
ksh: 1000: not found.
关于syntax - ksh bad [ … ] 语法不会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836225/