使用read时,Bash反斜杠转义问题

时间:2013-10-23 10:52:11

标签: bash readline

我有一些XSL在stdout上吐出samba路径。我正在迭代这些路径以将它们定位在磁盘上的挂载点上,因此请按照以下方式进行操作:

while read src dst ; do
    ...
done < <(xsltproc - file.xml <<XSL
...
XSL
)

现在,我可以通过在XSL样式表中执行路径转义或使用sed来轻松解决问题。但是,我从bash角度好奇,如何解决问题。以下是该问题的一个工作示例:

a='\\a\b\c\d\e'
ecyo $a
\\a\b\c\d\e
echo ${a//\\//}
//a/b/c/d/e
b=$a
echo $b
\\a\b\c\d\e
b=$(echo $a)
echo $b
\\a\b\c\d\e

这一切都很好,完全符合我的预期。这就是bash有点搞笑的地方:

read b < <(echo $a)
echo $b
\abcde
echo ${b//\\//}
/abcde

正如您所看到的,read在读取所有未转义的反斜杠时已将其删除,因此目录信息会丢失。

1 个答案:

答案 0 :(得分:2)

阅读bash手册,看起来效果很好:

read -r b < <(echo $a)

-r标志告诉read不要将反斜杠视为转义字符。