2

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

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

lines包含新行和\字符的出现(line将被解释为C字符串)。不幸的是,在这段代码的某个地方,\字符被简单地剥离了。为什么,我该如何解决?

编辑:示例输入是这样的:

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

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

4

1 回答 1

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
于 2012-11-05T16:09:36.660 回答