このファイルを考えると
$ cat foo.txt
\"That's funny, haha\"
二重引用符をエスケープ解除できますread
$ read bar < foo.txt
$ echo $bar
"That's funny, haha"
しかし、これはパイプで行うことができますか? 何かのようなもの
cat foo.txt | unescape
はいまたはいいえ、質問の意味に応じて。パイプはバックスラッシュを削除できませんが、ご覧のとおり、次のread
ことができます。
cat foo.txt | read bar
ただし、これはcat
ANDの無用な使用であり、とにかく必要なことを行いません。
Bash では、パイプの両側が独自のプロセスで実行されるという「機能」が追加されています。これは、変数 ( bar
) が呼び出しプロセスで使用できないことを意味します。したがって、バックスラッシュは削除されますが、あまり役に立ちません。
はい、それをキャプチャするために工夫することができます:
bar=$(cat foo.txt | { read bat;echo $bat;})
しかし、それは見た目が悪いだけでなく、非効率的でもあります。
リダイレクトに固執します。