2012-03-08 9 views
1

ランでSEDと場所で、WindowsのパスへのUNIXパスを翻訳:kshが:Kornシェル(ksh)の場合で、この変数

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

それが正常に動作MYVARがある場合は、// MYSERVER/myshareの しかし、同じことをやって変数に入れしようと、それはsedを で失敗します。改行またはファイルの最後のパターンで見つかっ

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

がどのように適切にUNIXスタイルからこのパスを変換しないと、Windowsスタイルのスラッシュにスラッシュ?

重要なサンプルデータ:

//QFLELSAMPLE/reports 

答えて

1

バッククォートの使用を停止するにはさらに別の理由バッククォートは、「新しいKornシェル応じて推奨されていません(あなたは、Solaris/HP/et.al上のBourneシェルを使用することを計画していない限り。)プログラミング言語 '、1995年に出版!

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

私はコマンド置換の$(cmd)バージョンを使用しています。

こちらがお役に立てば幸いです。

+0

私のシステム(Windowsサーバ上で動作するmksツールキット)では、\ myserver \ myshareを取得しています。それは最初のバックスラッシュを食べています。しかし、私は使用している入力を使って質問を修正しました。これは、\ rが出力を完全に破棄するctrl Mとして解釈される原因になります。だから私は最初のバックスラッシュと3番目のバックスラッシュを失っている。私はちょうどそれらのバックスラッシュをエスケープする必要がありますように見えます。私がそれらを二倍にすれば、私は正しい出力を得る。ほんとありがと。 –

+0

うわー、mkstoolkitを忘れてしまったのですが(10年以上も前から大好きでした!)興味深いことに、私の解決策を 'echo $" UNCVARで試してみてください。ポイントをありがとう! – shellter

0

完全な解決方法: ``の代わりに$()を使用し、バックスラッシュを倍にしてエコーからエスケープします。

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

あなたがUNCVARエクスポートしてセットを介して、それを表示する場合、それは価値があることをしかし奇妙な:

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

ダブル予想バックスラッシュを持つように思われます。 しかし、エコーで変数を渡すと正しい番号が得られます。