bash:一重引用符を文字列の2つの引用符に置き換えます。

bash:一重引用符を文字列の2つの引用符に置き換えます。

たとえば、一重引用符を含む変数がありa'b、ファイルを書き込む前に2つの一重引用符で置き換える必要がありますa''b

次のbashコードは私のために仕事をするために使用されます...

line="a'b"
echo "${line//\'/\'\'}" > out.txt

...今日まで、使用されているbashのバージョンによって異なる出力が見つかりました。

  • GNU bash、バージョン 4.3.48(1)-リリース(x86_64-pc-linux-gnu):a''b
  • GNU bash、バージョン 4.2.46(2)-リリース(x86_64-redhat-linux-gnu):a\'\'b

上記の行をさまざまな方法で修正しましたが、両方のa''bbashシェルで同じ出力を生成することはできません。

echo結局、との組み合わせを使うようになりましたsed

echo "$(echo $line | sed "s/'/''/g")" > out.txt

しかし、タスクを実行するために、より簡潔で純粋なbash表現を使用できるかどうかを知りたいです。できますか?

ベストアンサー1

の一つ多様性bash-4.3-alphaと以前のバージョンbash-4.2-releaseの間:

パターン置換語拡張を使用すると、bash は文字列内の引用符をエスケープ文字として機能させることができるようになり、引用符を削除して置換文字列を実行します。これは以前のバージョンと互換性がないため、bash互換モードを4.2に設定して無効にすることができます。


入力する:

BASH_COMPAT=4.2
line="a'b"
echo "${line//\'/''}"

出力:

a''b

おすすめ記事