或许最容易用一个例子来解释:
$ echo '\&|'
\&|
$ echo '\&|' | while read in; do echo "$in"; done
&|
看起来read
命令正在将输入中的反斜杠解释为转义字符并将其删除。我需要逐行处理文件而不改变其内容,但我不确定如何阻止read在此处智能化。有什么想法吗?
$ echo '\&|' | while read -r in; do echo "$in"; done
\&|
请使用read -r
, 参考http://www.ss64.com/bash/read.html:
-r
如果使用此选项,则反斜杠不会作为转义字符。
foo\nbar
,则read -r in && echo $in
将会输出两行。 - normaniusread
,而在于echo
- zsh内置的echo
默认情况下会转换转义序列,如\n
,而bash内置的echo
需要使用echo -e
选择启用转义处理。 - Ian Roberts