明示的な空の文字列に展開するように変数を設定しますか?

明示的な空の文字列に展開するように変数を設定しますか?

次のシェルスクリプト(example)があります(単純化)。

#!/bin/sh
./somecommand -s ${DOMAIN_SUFFIX:=.example.com}

実行すると./example正しく実行されます./somecommand -s .example.com

実行するとDOMAIN_SUFFIX=.stackexchange.com ./example正しく実行されます./somecommand -s .stackexchange.com

DOMAIN_SUFFIXQ:(スクリプト内で)明示的な空の文字列として渡されるようにどのように設定しますか?

つまり、実行する必要があります./somecommand -s ''

これを試しましたが、実行DOMAIN_SUFFIX='' ./example./somecommand -s失敗しました。

ベストアンサー1

シェルがすべての拡張を行い、空のフィールドで終わった後は、引用しない限り削除されます。変数を参照していないため、空の「」と判断された場合は、「somecommands」パラメーターのリストからその変数を削除する必要があります。それだけでなく、DOMAIN_SUFFIXにスペースやワイルドカードがある場合は、「somecommand」に驚くこともあります。

また、${DOMAIN_SUFFIX:=.example.com} は表示された結果に基づく誤差です。DOMAIN_SUFFIX='' ./exampleこれは、空のDOMAIN_SUFFIXがそれをデフォルト値に置き換えてから、いくつかのコマンドの引数リストに入れるからです。したがって、「null」は表示されません。${DOMAIN=.example.com}あなたが得た結果を説明します。

おすすめ記事