答案 0 :(得分:2)
有关-a
和-o
可能引发的问题的讨论,请参阅http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128_16。通常,解析表达式的方式取决于任何参数扩展到的内容。考虑以下测试:
test "$1" -a "$2"
根据$1
的值,这可能是
# Unspecified behavior
# With three arguments, the first "!", the second argument
# must be a unary primary like -n or -f.
test "!" -a "$2"
或
test "foo" -a "$2" # Test that "foo" and "$2" are non-zero length strings
如果$1
为!
,test
会将其视为否定运算符,而不是应检查其长度的字符串。
此外,test
仅适用于4个或更少的参数; -a
和-o
通常会将5个或多个参数传递给test
。