4

このファイルを考えると

$ cat foo.txt
\"That's funny, haha\"

二重引用符をエスケープ解除できますread

$ read bar < foo.txt

$ echo $bar
"That's funny, haha"

しかし、これはパイプで行うことができますか? 何かのようなもの

cat foo.txt | unescape
4

3 に答える 3

2

はいまたはいいえ、質問の意味に応じて。パイプはバックスラッシュを削除できませんが、ご覧のとおり、次のreadことができます。

cat foo.txt | read bar

ただし、これはcat ANDの無用な使用であり、とにかく必要なことを行いません。

Bash では、パイプの両側が独自のプロセスで実行されるという「機能」が追加されています。これは、変数 ( bar) が呼び出しプロセスで使用できないことを意味します。したがって、バックスラッシュは削除されますが、あまり役に立ちません。

はい、それをキャプチャするために工夫することができます:

bar=$(cat foo.txt | { read bat;echo $bat;})

しかし、それは見た目が悪いだけでなく、非効率的でもあります。

リダイレクトに固執します。

于 2013-05-02T08:03:34.820 に答える