bashでは、なぜ[1]が失敗しなければならないのでしょうか?

シェルスクリプト( bash )では、なぜ条件が成立するのですか?

if [ 1 ]
then
 echo should not enter
fi

#Output
should not enter
3
@PreetSanghaありがとう
追加された 著者 puk,
良い質問。人々が基本を尋ねることを恐れていないのを見てうれしいです。
追加された 著者 Preet Sangha,
1は真であるため
追加された 著者 chown,

3 答え

bashの大括弧は、大括弧内の引数を使って test を呼び出すのと同じです。 man test はそれを示しています

STRINGは-n STRINGと同等です

そして

-n STRING       STRINGの長さはゼロ以外です。

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

7
追加された

明白でないかもしれないことは、これらの2つが非常に異なっていることです。

if [ false ]

そして

if false

The first, as thiton そして Ignacio Vazquez-Abrams say, implicitly checks if the string false is empty. The second version tests the exit status of the commそして 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.

2
追加された

1 は空の文字列ではないためです。それには数字「1」である1文字が含まれています。

1
追加された