ksh:使用sed将unix路径转换为windows路径并将其放置在变量中

时间:2012-03-08 19:41:18

标签: shell unix scripting sed ksh

在KornShell(ksh)上运行:

echo ${MYVAR} | sed 's/\//\\/g'

如果MYVAR是// myserver / myshare,它可以正常工作 但是做同样的事情并试图将它放入一个变量中它失败了 sed:在模式中找到的换行符或文件结尾

UNCVAR=`echo ${MYVAR} | sed 's/\//\\/g'`

如何将此路径从UNIX样式斜杠正确转换为Windows样式斜杠?

重要的样本数据:

//QFLELSAMPLE/reports

2 个答案:

答案 0 :(得分:1)

停止使用反引号的另一个原因(除非您打算在Solaris / HP / et.al上使用Bourne Shell。)反引号根据1995年发布的“新Kornshell编程语言”而被弃用!

MYVAR="//myserver/myshare"
UNCVAR=$(echo ${MYVAR} | sed 's/\//\\/g')
echo "$UNCVAR"
\\myserver\myshare

请注意,我正在使用$( cmd )版本的命令替换。

我希望这会有所帮助。

答案 1 :(得分:0)

完整的解决方案:使用$()代替``并加倍反斜杠以使它们不受回声的影响。

MYVAR="//QFLELSAMPLE/reports"
UNCVAR=$(echo ${MYVAR} | sed 's/\//\\\\/g')
echo "$UNCVAR"

虽然如果然后导出UNCVAR并通过set查看它,它会有值:

,这很奇怪
\\\\\\\\QFLELITE38\\\\reports

这似乎是预期反斜杠的两倍。 但是通过echo传递变量给出了正确的数字,这就是我所追求的。