次のシェルスクリプト(example
)があります(単純化)。
#!/bin/sh
./somecommand -s ${DOMAIN_SUFFIX:=.example.com}
実行すると./example
正しく実行されます./somecommand -s .example.com
。
実行するとDOMAIN_SUFFIX=.stackexchange.com ./example
正しく実行されます./somecommand -s .stackexchange.com
。
DOMAIN_SUFFIX
Q:(スクリプト内で)明示的な空の文字列として渡されるようにどのように設定しますか?
つまり、実行する必要があります./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}
あなたが得た結果を説明します。