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