syntax - ksh bad [ … ] 语法不会导致错误

标签 syntax ksh

我刚刚在 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/

相关文章:

c - c中的这两个声明有什么区别?

java - 如何在 Java 中使用 String.format() 复制选项卡 "\t"?

linux - UNIX,更改所有 shell 脚本中的解释器行

linux - Shell脚本不从输入文件中获取参数

unix - 使用 SED 从文件中删除一行并将输出重定向到同一文件

c - 两个 C 语法花絮 : no init for and char *w[4] vs char w[4]

javascript - **(双星号)在 JavaScript 中是什么意思?

android - Eclipse:奇怪的语法错误

shell - 在第 34 行出现语法错误 : `<<' unmatched in ksh script

c - 在 Korn shell 脚本中将斜杠替换为单词 'slash'