斯蒂芬·查泽拉斯写道:
一些规则,例如
- 总是引用变量
- 切勿使用
-a
or-o
运算符(使用多个[
命令以及&&
和||
shell 运算符)
[
使用 POSIX shell提高可靠性。
为什么“永远不要使用-a
或-o
运算符”?
我怎样才能做到“使用多个[
命令以及&&
和||
shell 运算符)”?
答案1
为什么“永远不要使用
-a
或-o
运算符”?
指定 -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 ]; }