切勿将“-a”或“-o”运算符与“[”一起使用

切勿将“-a”或“-o”运算符与“[”一起使用

斯蒂芬·查泽拉斯写道:

一些规则,例如

  • 总是引用变量
  • 切勿使用-aor-o运算符(使用多个[命令以及&&||shell 运算符)

[使用 POSIX shell提高可靠性。

为什么“永远不要使用-a-o运算符”?

我怎样才能做到“使用多个[命令以及&&||shell 运算符)”?

答案1

为什么“永远不要使用-a-o运算符”?

因为它们可能不明确,因此不符合 POSIX 标准:

指定 -a 和 -o 二进制原色以及“(”和“)”运算符的 XSI 扩展已被标记为过时。 (许多使用它们的表达式是由语法模糊定义的,具体取决于正在评估的特定表达式。)使用这些表达式的脚本应转换为下面给出的形式。尽管许多实现将继续支持这些过时的形式,但脚本在处理用户提供的输入时应该非常小心,因为这些输入可能会与这些和其他原色和运算符混淆。除非应用程序开发人员知道向脚本生成输入的所有情况,否则调用如下:

test "$1" -a "$2"

应写为:

test "$1" && test "$2"

我怎样才能做到“使用多个[命令以及&&||shell 运算符)”?

通过进行多个测试并使用所述运算符将它们链接起来;例如:

[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]

可以重写为等价的:

[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])

或更好:

[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }

相关内容