在 bash 中,为什么 if [ 1 ] 不会失败?

发布于 2024-12-15 14:46:57 字数 141 浏览 0 评论 0原文

在 shell 脚本 (bash) 中,为什么条件得到满足

if [ 1 ]
then
 echo should not enter
fi

#Output
should not enter

In shell scripting (bash) why does the conditional get satisfied

if [ 1 ]
then
 echo should not enter
fi

#Output
should not enter

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

看透却不说透 2024-12-22 14:46:57

bash 中的方括号相当于使用括号内的参数调用 testman test

STRING 相当于 -n STRING

-n 字符串
STRING 的长度非零

,并且 1 不是空字符串。 if [ 0 ]if [ false ]if [ no ] 具有相同的结果,但 if [ "" ]< /code> 还没有。

The square brackets in bash are equivalent to calling test with the arguments within the brackets. man test says that

STRING equivalent to -n STRING

and

-n STRING
the length of STRING is nonzero

, and 1 is not an empty string. if [ 0 ], if [ false ] and if [ no ] have the same result, but if [ "" ] has not.

另类 2024-12-22 14:46:57

可能不明显的是,这两者非常不同:

if [ false ]

https://stackoverflow.com/questions/8108462/in-bash-why-does-if-1-not-fail

if false

第一个,如 硫顿Ignacio Vazquez-Abrams 说,隐式检查是否字符串 false 为空。第二个版本测试命令 false 的退出状态。 (退出状态的测试实际上并不是真/假测试。它检查以数字代码表示的成功或失败。正如您可以想象的那样,false 的退出状态始终是失败。这就是它的工作。)

有关所有这一切的更多信息,请参阅 BashGuide href="http://mywiki.wooledge.org/" rel="nofollow noreferrer">Greg 的 Wiki 非常清楚。

What may not be obvious is that these two are very different:

if [ false ]

and

if false

The first, as thiton and Ignacio Vazquez-Abrams say, implicitly checks if the string false is empty. The second version tests the exit status of the command false. (The testing of an exit status isn't literally a true/false test. It checks for success or failure as represented by numeric codes. As you can imagine, the exit status of false is always failure. That's its job.)

For more on all of this, the BashGuide on Greg's Wiki is very clear.

韶华倾负 2024-12-22 14:46:57

因为1不是空字符串;它里面有一个字符,那就是数字“1”。

Because 1 is not an empty string; it has one character in it, which is the numeral "1".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文