19

エスケープされていないドル記号を含む変数がある場合、変数の内容全体をエコーする方法はありますか?

たとえば、何かがスクリプトを呼び出します。

./script.sh "test1$test2"

次に、パラメータを使用する場合は、次のように「切り捨て」られます。

echo ${1}
test1

もちろん、変数名を一重引用符で囲むことは役に立ちません。スクリプトがパラメーターを受け取ったら、少なくともドル記号を自分でエスケープできるように、引用する方法がわかりません。

4

4 に答える 4

31

問題は、スクリプトが最初に「test1」を受け取り、空の(宣言されていない)変数への参照があったことを認識できない可能性があることです。$次のように、スクリプトに渡す前にエスケープする必要があります。

./script.sh "test1\$test2"

または'、次のような一重引用符を使用します。

./script.sh 'test1$test2'

この場合、bashはそのパラメーター文字列から変数を展開しません。

于 2010-10-13T12:36:29.183 に答える
7

スクリプトが実行される前に、変数が置き換えられます。

./script.sh 'test1$test2'
于 2010-10-13T12:33:54.773 に答える
4

一重引用符を使用することにより、のようなメタ文字$はそのリテラル値を保持します。二重引用符を使用すると、変数名が補間されます。

于 2010-10-13T12:38:43.080 に答える
0

Ignacioが言ったように、変数が置き換えられるため、スクリプトはとの値として取得さ./script.sh test1れます。$0$1

ただし、引数を渡すためにリテラル引用符を使用した場合でも、常に引用符"$1"で囲む必要がありますecho "${1}"。これは良い習慣です。

于 2010-10-13T12:37:20.757 に答える