逐行读取变量而不会吞噬\字符

时间:2012-11-05 16:02:54

标签: bash quoting

我正在使用此代码段逐行读取变量:

echo "${lines}" | while read line; do something with ${line}; done

lines包含新行和\字符的出现次数(line将被解释为C字符串)。不幸的是,在此代码中的某处,\字符被简单地删除。为什么,以及如何解决这个问题?

编辑: 这样的示例输入:

foo $'bar'
fee $'ber\fbir'

请注意,只有\被删除,而不是$'',稍后将用于将字符串解释为C字符串。

1 个答案:

答案 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