2012-03-08 99 views
1

運行sed和地方這種轉化UNIX路徑到Windows路徑:如果MYVAR是KSH:在KornShell(KSH)與可變

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

它工作正常// MYSERVER/myshare的 但這樣做相同的,試圖把它變成一個變量,它失敗 的sed:換行符或最終文件的模式發現

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

如何正確地從UNIX風格轉換這個路徑斜槓的windows風格的斜線?

重要樣本數據:

//QFLELSAMPLE/reports 

回答

1

另一個原因停止使用反引號反引號是根據「新Kornshell棄用(除非您打算使用的是Bourne shell在Solaris/HP/et.al。)編程語言「,1995年出版!

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

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

我希望這會有所幫助。

+0

在我的系統上(在Windows服務器上運行mks工具包)我得到\ myserver \ myshare。它正在吃第一個反斜槓。但是我使用我正在使用的輸入修改了這個問題,導致\ r被解釋爲一個ctrl M,它完全拋棄了輸出。所以我失去了第一個反斜槓和第三個反斜槓。似乎我應該只需要避開那些反斜槓。如果我加倍他們我得到正確的輸出。那謝謝啦。 – 2012-03-09 16:10:35

+0

哇,已經忘記了mkstoolkit(儘管我十多年前就喜歡它!)只是爲了感興趣的緣故,請嘗試我的解決方案,但使用'echo $「$ UNCVAR」。感謝您的積分! – shellter 2012-03-09 16:33:52

0

完整的解決方案:使用$()而不是``並加上反斜槓以避免它們回顯。

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

奇怪的是,如果你再出口UNCVAR,並通過集查看它的值是:

\\\\\\\\QFLELITE38\\\\reports 

似乎有雙重預期的反斜槓。 但通過回聲傳遞變量給出了正確的數字,這是我所追求的。