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