BASH:[](测试)表现不一致

dav*_*ide 5 linux bash gnu

在我的bash中test有退出状态的态度0:

$ test -n && echo true || echo false
-> true
Run Code Online (Sandbox Code Playgroud)

$ test -n "" && echo true || echo false
-> false
Run Code Online (Sandbox Code Playgroud)

这意味着当它根本没有收到任何参数时,它假定为非零.

案例-z正常工作:

$ test -z && echo true || echo false
-> true
$ test -z "" && echo true || echo false
-> true
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

jpa*_*cek 6

基本上,您要测试字符串"-z"是否为非空.它是,它告诉你true.实际算法测试使用的是:

  • 0参数:

    退出false(1).

  • 1个论点:

    如果$ 1不为null,则退出true(0); 否则,退出false.

  • 2个论点:

    如果$ 1是'!',如果$ 2为null,则返回true;如果$ 2不为null,则返回false.

    如果$ 1是一元主要,如果一元测试为真,则返回true,如果一元测试为假,则返回false.

    否则,产生未指定的结果.

...

引自POSIX测试命令规范.