1

私は次のスクリプトに完全に夢中になっています。

次のコマンドは期待どおりに機能します。

echo a | sed 's/a/b/'

出力:

b

しかし、このスクリプトはそうではありません:

test="'s/a/b/'"
echo a | sed $test

出力:

sed: -e expression #1, char 1: unknown command : `''

私は本当にばかげているはずですが、何が欠けているのかわかりません。

ありがとう、

4

3 に答える 3

2
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/'
于 2012-12-17T11:42:23.220 に答える
1

あなたはこれが欲しいかもしれません:

kent$  test="s/a/b/"         

kent$  echo a | sed ${test}
b

また

kent$  echo a | sed $test  
b

また

test=s/a/b/
于 2012-12-17T11:38:55.310 に答える
1

これは、文字列を二重にラップしているためです。test="'s/a/b'". Sed は's/a/b/'リテラル文字列として取得します。sed だけが受信するようにしますs/a/b/
文字列を1 組の quotesで囲むだけで済みます。そうしないと、内側の一連の引用符が引数の一部として解釈されます。

于 2012-12-17T11:43:24.653 に答える