たとえば、一重引用符を含む変数があり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''b
bashシェルで同じ出力を生成することはできません。
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