私は次のスクリプトに完全に夢中になっています。
次のコマンドは期待どおりに機能します。
echo a | sed 's/a/b/'
出力:
b
しかし、このスクリプトはそうではありません:
test="'s/a/b/'"
echo a | sed $test
出力:
sed: -e expression #1, char 1: unknown command : `''
私は本当にばかげているはずですが、何が欠けているのかわかりません。
ありがとう、
test="'s/a/b/'"
echo a | sed $test
次と同等です。
test="'s/a/b/'"
echo a | sed "'s/a/b/'"
と の両方でsed
コマンドを理解していないことは明らかで、コマンドとして解釈します。次のいずれかを使用できます。"
'
'
test='s/a/b/'
または
test='s/a/b/'
あなたはこれが欲しいかもしれません:
kent$ test="s/a/b/"
kent$ echo a | sed ${test}
b
また
kent$ echo a | sed $test
b
また
test=s/a/b/
これは、文字列を二重にラップしているためです。test="'s/a/b'"
. Sed は's/a/b/'
リテラル文字列として取得します。sed だけが受信するようにしますs/a/b/
。
文字列を1 組の quotesで囲むだけで済みます。そうしないと、内側の一連の引用符が引数の一部として解釈されます。