ksh: traduit le chemin d’unix en chemin de windows avec sed et place en variable

Exécutez ceci sur un KornShell (ksh):

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

Cela fonctionne très bien si MYVAR est // myserver / myshare Mais en faisant de même et en essayant de le placer dans une variable et cela échoue avec sed: newline ou end of file found in pattern

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

Comment convertir correctement ce chemin depuis les barres obliques de style UNIX vers les barres de style Windows?

Données d’échantillon importantes:

 //QFLELSAMPLE/reports 

Encore une autre raison de ne plus utiliser les backticks (sauf si vous prévoyez d’utiliser le shell Bourne sur Solaris / HP / et.al).

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

Notez que j’utilise la version $( cmd ) de la substitution de commande.

J’espère que ça aide.

Solution complète: Utilisez $ () au lieu de “ et doublez les barres obliques inverses pour leur échapper.

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

Bizarrement, si vous exportez alors UNCVAR et que vous le visualisez via set, il a la valeur suivante:

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

Ce qui semble avoir le double des antislashs attendus. Mais passer la variable par écho donne le nombre correct qui est ce que je suis après.