我有一些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
在读取所有未转义的反斜杠时已将其删除,因此目录信息会丢失。
答案 0 :(得分:2)
阅读bash手册,看起来效果很好:
read -r b < <(echo $a)
-r
标志告诉read不要将反斜杠视为转义字符。