Bashで割り当てると
a=
今の状況はどうですかa
?私はaが''
文字列ではないと確信しています0
。
次のテストのみが正しいことが確認されました。
if [ $a = ];then echo 'good';fi
答え1
空の文字列です。
これは次のことと同じです。
a=''
または
a=""
または
a=$''
またはその問題について:
a=''""$''
''
、""
およびは$'...'
シェルの参照演算子です。これを行うとき:
a=''
$a
2つの単一引用符文字で構成される文字列を空の文字列に割り当てません。''
内部に何もないので重複しますが、これはコードが少し明確になる可能性があります(空の文字列を割り当てる意図があることをより明確に示す)。
''
にリテラルを割り当てるには、$a
次の特殊文字を引用する必要があります。
a="''" a=\'\' a=$'\'\'' a="'"\'
テストコマンドが無効です。存在する
[ $a = ]
引用を忘れたので、$a
分割+グローブ演算子が適用されます$a
。空のため$a
(ただしデフォルトの空白または改行のみを含む場合は結果は同じです)、コマンドに$IFS
引数は渡されません。[
したがって、受け取ったすべての引数は、および[
です。の場合、これは空でない文字列であることを確認してtrueを返すテストです。[
=
]
[
=
必要なのは、次のパラメータを[
コマンドに渡すことです。
[
$a
必要なもの"$a"
=
- 空の文字列。これを行うには、次のものが必要です
''
。""
何も渡さないと、パラメータが渡されないことを意味する[
ため、4番目のパラメータは終了パラメータになります]
。 ]
したがって、次のようにする必要があります。
if [ "$a" = '' ]; then echo '$a is empty'; fi
または:
if [ -z "$a" ]; then echo '$a is empty'; fi
答え2
変数aは空の文字列と同じです。
a=
if [ "$a" -eq "" ]; then echo 'good'; fi
出力は次のとおりです
$ . tst.sh
good
このコードの場合:
a=
if [ -z "$a" ]; then echo 'good'; fi
出力は同じです。