27231


シェルスクリプトをみていると、

[code]

    if [ "x$var" = "x" ]; then
        : ...
    fi
    
[/code]

のような記述をしばしば見かけます。

`[ -z "$var" ]` や `[ "$var" = "" ]` ならばまだわかりますが、 `x` をわざわざはさむ理由は何ですか？


CC BY-SA 3.0
2016-06-30T14:03:52.367
27226
2016-07-14T19:20:29.013
754
question
sh
if 文で [ "x$var" = "x" ] とする理由は？


[Bashのよくある間違い](https://yakst.com/ja/posts/2929)  
の 4. を参照ください。  
var=-f などの場合、エラーとなるシェルがある(あった)という理由だそうです。


CC BY-SA 3.0
2016-06-30T16:40:20.393
27231
2016-06-30T16:40:20.393
4603
27226
answer


補足で、 POSIX のシェルでは、引数の数で処理が分岐するので、単項演算子や二項演算子がそれ単体で使われる test コマンドであるならば、今回の x
escape (みたいなもの) はいらない様子です。

<http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html>


CC BY-SA 3.0
2016-07-14T18:56:20.093
27634
2016-07-14T19:20:29.013
2016-07-14T19:20:29.013
754
754
27226
answer