unix シェル (bash) で sed を使用して、文字列内のセミコロン (';') をエスケープ ('\') しようとしています。変数に値を割り当てずに直接実行すると機能します。あれは、
$ echo "hello;" | sed 's/\([^\\]\);/\1\\;/g'
hello\;
$
ただし、上記のコマンドが変数に割り当てられている場合は機能しないようです。
$ result=`echo "hello;" | sed 's/\([^\\]\);/\1\\;/g'`
$
$ echo $result
hello;
$
理由はありますか?
引用符の有無にかかわらず値を使用してみましたが、役に立ちませんでした。手がかりは大歓迎です。
ところで、私は最初、文字列の末尾にあるセミコロンが何らかの形でターミネーターとして機能していると考えたため、シェルはsed
(それが意味をなす場合) を実行し続けませんでした。ただし、それは問題ではないようです。文字列の最後ではなく(その間のどこかで)セミコロンを使用してみました。以前と同じ結果が表示されます。あれは、
$ echo "hel;lo" | sed 's/\([^\\]\);/\1\\;/g'
hel\;lo
$
$ result=`echo "hel;lo" | sed 's/\([^\\]\);/\1\\;/g'`
$
$ echo $result
hel;lo
$