问题描述
在我的重击中,test
的态度是退出,状态为0
:
In my bash test
has an attitude to exit with status 0
:
$ test -n && echo true || echo false
-> true
同时
$ test -n "" && echo true || echo false
-> false
这意味着当它根本不接收任何参数时,它将假定为非零.
It means when it doesn't receive any argument at all, it assumes nonzero.
案例-z
相反可以正常工作:
The case -z
works properly instead:
$ test -z && echo true || echo false
-> true
$ test -z "" && echo true || echo false
-> true
这是预期的行为吗?
推荐答案
基本上,您是在询问测试字符串"-z"是否为非空.是的,所以它告诉您true
.实际的算法测试使用的是:
Basically, you are asking test whether the string "-z" is nonempty. It is, so it tells you true
. The actual algorithm test uses is:
退出false(1).
Exit false (1).
1个参数:
如果$ 1不为null,则返回true(0);否则为0.否则,返回false.
Exit true (0) if $1 is not null; otherwise, exit false.
2个参数:
如果$ 1为'!',如果$ 2为null则退出,如果$ 2不为null则退出.
If $1 is '!', exit true if $2 is null, false if $2 is not null.
如果$ 1是一元主变量,则如果一元测试为true,则退出true,否则返回false 如果一元测试为假.
If $1 is a unary primary, exit true if the unary test is true, false if the unary test is false.
否则,将产生未指定的结果.
Otherwise, produce unspecified results.
...
引自 POSIX测试命令规范.
这篇关于BASH:[](测试)的行为不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!