3

質問が非常に単純で申し訳ありませんが、シェルスクリプトの初心者です。私はこのようなものを書こうとしています:

for i in {1..20}
do
   curl "something $i ........ -d  'something "$i" something' "
done

問題は$i、一重引用符の部分 '' 内の 2 番目が置き換えられていないことです。それを機能させるにはどうすればよいですか?

4

3 に答える 3

5

上記のように、パラメーターは一重引用符内では展開されないため、二重引用符を使用する必要があります。\唯一のポイントは、すでに二重引用符で囲まれた文字列で発生するため、次のようにバックスラッシュ () でエスケープする必要があることです。

$ foo=バー
$ eval "echo \"something \\\"$foo\\\"\""
何か「バー」

\これは 2 回展開されるため、最も内側の の前に3 つあることに注意してください"(1 回は の引数をeval評価するとき、もう 1 回は の引数を評価するときecho) 。

于 2012-10-24T07:56:14.283 に答える
2

これは、単一引用符内の変数''が置き換えられていないためです。変数置換が必要な場合は、一重引用符を取り除く必要があります。

その変数を事前に初期化することができます

foo="something $i bla bla bla"
curl "something ... ${foo}something"
于 2012-10-24T07:40:05.393 に答える
0

あなたの引用は正しくありません。$i全体がすでに二重引用符で囲まれているため、秒を二重引用符で囲む必要はありません。

次のように変更します。

for i in {1..20}
do
   curl "something $i ........ -d  'something $i something'"
done
于 2012-10-24T07:41:04.103 に答える