bash でテスト構文を間違えましたが、文字列チェックで実際に何が起こるかを理解したいと思い-n
ます-z
. LINENUM
から行番号を変数で取得するために、次の行を書きましたgrep
。文字列が見つからない場合 (ファイル内に 1 つしかないことは確かです)、LINENUM
変数は空です。
$ LINENUM=$(grep -w -n mystring myfile | cut -d: -f1)
$ echo --$LINENUM--
----
$ if [ -n $LINENUM ] ; then echo "Checked -n"; fi
Checked -n
$ if [ -z $LINENUM ] ; then echo "Checked -z"; fi
Checked -z
次に、二重引用符を忘れたことに気付き、次のチェックが表示されました。
$ if [ -n "$LINENUM" ] ; then echo "Checked -n"; fi
$ if [ -z "$LINENUM" ] ; then echo "Checked -z"; fi
Checked -z
したがって、以前のテストでは、二重引用符を忘れていましたが、 if テストでは何をチェックしたのに対し、-n
と-z
?の両方から 2 つの肯定的なチェックを取得したためです。