3

文字列内の特殊文字を自動的にエスケープしたい。その文字列をエコーし​​て、いくつかのsedにパイプすることを考えました。これは、バックティック内では機能しないようです。では、なぜ

echo "foo[bar]" | sed 's/\[/\\[/g'

戻る

foo\[bar]

しかし

FOO=`echo "foo[bar]" | sed 's/\[/\\[/g'` && echo $FOO

ただ戻る

foo[bar]

?

sed とは対照的に、tr はバッククォート内で完全に機能します。

FOO=`echo "foo[bar]" | tr '[' '-' ` && echo $FOO

戻り値

foo-bar]
4

3 に答える 3

16

バッククォートを使用せずに $() を使用するのはどうですか?

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO

バッククォートの使用を主張する場合は、すべての \ を二重の \ にエスケープする必要があると思います

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO
于 2009-09-29T13:19:53.590 に答える
7

バッククォート間のバックスラッシュをエスケープする必要があります。

FOO=`echo "foo[bar]" | sed 's/\\[/\\\\[/g'` && echo $FOO

または、 を使用します$()(これは実際に推奨される方法です)。

FOO=$(echo "foo[bar]" | sed 's/\[/\\[/g') && echo $FOO
于 2009-09-29T13:23:39.837 に答える
2

通常、それはアンダーエスケープの場合です

FOO=`echo "foo[bar]" | sed 's/\[/\\\[/g'` && echo $FOO
于 2009-09-29T13:23:14.363 に答える