ここで「x$START_DAEMON」=「xyes」を使用するのはなぜですか? (先行x)

ここで「x$START_DAEMON」=「xyes」を使用するのはなぜですか? (先行x)

これは fetchmail デーモンスクリプトの一部です。

if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "status" ]; then

それを使う理由は何ですかx$START_DAEMON = "xyes"?ただ使用しないのはなぜですか$START_DAEMON = "yes"

ベストアンサー1

x$variableそのような場合を見たことがあります。いいえこの場合の参照は、$START_DAEMON変数(この場合)が空である可能性がある場合を処理することです。それ以外の場合は、テストが存在することを確認し、! = "yes"エラーが発生します。しかし、あなたのコメントで指摘したように、二重引用符はx$variableこの問題を解決します。

一方、質問はサーバー障害このページに移動します。http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.htmlそのうちの1つは、潜在的に混乱したり混乱した変数の拡張を防ぐことです[test

それにもかかわらず、私はこれが古い(オープングループページに記載されているように「歴史的」)シェルの問題である可能性があると思いますx。したがって、これはおそらく主にコーディングの伝統です。/bin/shしかし、SunOS 5.10で使用する際に問題があることを確認しました。

 # a="!"; [ "$a" = "yes" ] && echo ok
 test: argument expected

おすすめ記事