標準出力に Samba パスを吐き出す XSL がいくつかあります。これらのパスを繰り返してディスク上のマウントポイントに配置しているので、次のようなものがあります。
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
はエスケープされていないバックスラッシュを読み込むときにすべて削除したため、ディレクトリ情報が失われます。