エスケープされていないドル記号を含む変数がある場合、変数の内容全体をエコーする方法はありますか?
たとえば、何かがスクリプトを呼び出します。
./script.sh "test1$test2"
次に、パラメータを使用する場合は、次のように「切り捨て」られます。
echo ${1}
test1
もちろん、変数名を一重引用しても役に立ちません。スクリプトがパラメーターを受け取ったら、少なくともドル記号を自分でエスケープできるように、引用する方法がわかりません。
スクリプトが実行される前に、変数が置き換えられます。
./script.sh 'test1$test2'
問題は、スクリプトが最初に「test1」を受け取り、空の(宣言されていない)変数への参照があったことを認識できない可能性があることです。次のように、スクリプトに渡す前に$
をエスケープする必要があります。
./script.sh "test1\$test2"
または、次のように一重引用符'
を使用します。
./script.sh 'test1$test2'
この場合、bashはそのパラメーター文字列から変数を展開しません。
一重引用符を使用することにより、$
のようなメタ文字はそのリテラル値を保持します。二重引用符を使用すると、変数名が補間されます。
Ignacioが言ったように、変数が置き換えられるため、スクリプトは./script.sh test1
と$0
の値として$1
を取得します。
ただし、引数を渡すためにリテラル引用符を使用した場合でも、常に"$1"
でecho "${1}"
を引用する必要があります。これは良い習慣です。