Shell脚本:undefined -a,-o switch behavior

时间:2016-09-21 16:47:58

标签: posix sh undefined-behavior logical-operators

根据shellcheck wiki

  

-a-o表示[...]测试表达式中的ANDOR定义不明确。它们是POSIX中过时的扩展,它们的行为几乎总是未定义的。

知道会发生什么错误吗?

1 个答案:

答案 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