Answers:
为什么“从不使用
-a
or-o
运算符”?
指定-a和-o二进制基元以及'('和')'运算符的XSI扩展已被标记为过时。(根据所评估的特定表达式,语法会模糊地定义许多使用它们的表达式。)使用这些表达式的脚本应转换为下面给出的形式。尽管许多实现将继续支持这些过时的形式,但是在处理用户提供的输入时,脚本应格外小心,这些输入可能与这些以及其他主操作符和运算符相混淆。除非应用程序开发人员知道产生脚本输入的所有情况,否则调用将类似:
test "$1" -a "$2"
应写为:
test "$1" && test "$2"
我该如何“使用几个
[
命令以及&&
and和||
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 ]; }
()
和{}
作为替代。(2)第一个;(())
是用于算术扩展的,此处您要测试测试链的退出状态,因此可以将测试分组在子shell ()
或当前shell中{}
。
(
and )
运算符的唯一原因是在使用-a
or时-o
。由于后者已过时,因此显然也不再需要前者。
(
和)
将命令分组的操作员吗?如果它们已过时,它们的替代品是什么?(2)应该test "$1" -a "$2"
用test "$1" && test "$2"
或代替((test "$1" && test "$2"))
吗?我们不需要((..))
吗?