• 締切済み

bash での空文字判定?

文字列が空文字かどうか判定する場合(?)に、よく以下のような記述を見ます if [ "x${str}" = "x" ]; then echo "str is empty." fi なぜ、"${str}" = "" ではないのでしょうか?

みんなの回答

  • entree
  • ベストアンサー率55% (405/735)
回答No.2

$strの内容がオプションと勘違いされないようにするためと思われます。 if [ "x${str}" = "x" ]; then これは、下記と同義です。 if test "x${str}" = "x"; then ifの中はコマンドで、ここではtestというコマンドです。 この部分だけ取り出してみましょう。 test "x${str}" = "x" testコマンドに対する 第1引数は "x${str}" 第2引数は = 第3引数は x です。 もし、$strが -f だったとしましょう。 xありの場合は、test x-f = x です。 xなしの場合は、test -f = x です。 後者(xなし)の場合は、 オプション -f 第1引数は = 第2引数は x とも読み取れなくないですよね? このような誤解釈を防ぐために、xを付けているのでしょう。 「x-f」はオプションにはなりませんので。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

空文字列が使えない他の言語からの混入です。そういう言語だと、空かどうかの判断に、 if x$str = x のようにしないといけない。 shの場合は、お書きのように x は不要です。 そもそも、「空文字列かどうか」の判断であれば、 if [ -z "${str}" ] で十分です。 もしかすると、ごく初期のshだと空文字列をうまく使えなかったのかもしれませんが、少なくとも30年前のUnixのshは大丈夫でした。