2011-11-05 31 views
6

私はbashスクリプトを研究しています。 私は以下のサンプルスクリプトをWebから入手しました。bashスクリプトの文字列比較

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

5行目(x$strx"test")上のxとは何ですか? 「x」には特別な意味がありますか?

答えて

2

例の式の左側が空でないことを確認します。 strが設定されていない場合は、条件は[ == "test" ]となり、エラーとなります。

単一の文字を使用して空でないものにする代わりに、変数を二重引用符で囲んでxを完全にスキップすることもできます([ "$str" == "test" ])。

9

は特別な意味はなく、$strが空だった場合、その後、

if [ $str == "test" ] 

はテストに何の置換につながると、それは次のようになり、この

if [ == "test" ] 

ようになります構文エラー。正面にXを追加するとこれが解決されますが、これをこのように引用します。

これをより理解しやすく理解できる方法です。

+0

例は新鮮なbashコンパイルをテストするために使用されたテストケースから取られているようですが、私がprepend xメソッドに見つけた参照だけがメソッドが優れていて、テストケースを変更する必要があるかどうかを議論していました。 – ewanm89

+0

味の問題は何が良いのですか?私はxメソッドをいくつかの場所で見てきましたが、パイプラインや深い代入にコードが読みやすくなる場所があることを確信しています。直感的に理解されており、決して質問を提起しませんでした。 – Soren

+0

ええ、私はそれが私の議論だとは言わなかった、私はそれがGNU bashメーリングリストの主張だと言った。 – ewanm89