我正在使用此代码段逐行读取变量:
echo "${lines}" | while read line; do something with ${line}; done
lines
包含新行和\
字符的出现次数(line
将被解释为C
字符串)。不幸的是,在此代码中的某处,\
字符被简单地删除。为什么,以及如何解决这个问题?
编辑: 这样的示例输入:
foo $'bar'
fee $'ber\fbir'
请注意,只有\
被删除,而不是$''
,稍后将用于将字符串解释为C
字符串。
答案 0 :(得分:1)
您可以转义\
个字符,以便它们仍然存在于您的read line
中,如下所示:
echo "${lines}" | sed 's/\\/\\\\/g' | while read line; do something with ${line}; done
更新:我刚刚在一些测试后更新了上面的sed线,现在就试试吧,它对我有用。
更新2 :因为看起来jordanm删除了他的答案,这个答案使用了比我更好的方法,我会在这里自己添加:
对-r
命令使用read
参数,它指示它不要转义斜杠,所以这也可以工作:
echo "${lines}" | while read -r line; do something with ${line}; done