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