私は次のことを考えました。
xx=abc ; echo "abcde-123" | sed -e s/$xx/$xx_nnn/g
につながります abcde_nnn123
。しかし結果はです。
ドイツ語-123
ご覧のとおり、プレフィックスxx=abc
が削除され、_nnn
置換パターンは完全に無視されます。なぜこれが起こるのですか?
答え1
ここで最大の問題は、実際には存在しない変数を/$xx_nnn/
渡していることです。$xx_nnn
したがって、基本的に次のように実行しています。
xx=abc ; echo "abcde-123" | sed -e s/$xx//g
#or what is equivalent:
echo "abcde-123" | sed -e s/abc//g
だからあなたは次のようになります:de-123
、あなたはabc
何も置き換えません。
最善の解決策は、次を使用することです。${varname}
たとえば、次のようになります。
xx=abc ; echo "abcde-123" | sed -e "s/$xx/${xx}_nnn/g"
次の内容はすべて}
変数名の一部ではありません。
について:
結果は abcde_nnn123 です。
そのような結果ではないでしょう。sed
提供されたコマンドを使用すると、次のようになります。
abc_nnnde-123
したがって、本当に次のようにしたい場合は、abcde_nnn123
コードは次のようになります。
xx=abcde ; echo "abcde123" | sed -e "s/$xx/${xx}_nnn/g"
以下を使用して文字列を置き換えることもできます。Bash パラメータ拡張。たとえば、
str='abcde123'
xx='abcde'
echo "${str/$xx/${xx}_nnn}" # means: in 'abcde123' replace 'abcde'
#with `abcde_nnn`