0

我有一些 XSL 在标准输出上吐出 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当它读入所有未转义的反斜杠时,它们已被剥离,因此目录信息会丢失。

4

1 回答 1

3

阅读 bash 手册,似乎这很好用:

read -r b < <(echo $a)

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

于 2013-10-23T10:55:22.167 回答