Je veux remplacer le backslash( \
) avec une barre oblique ( /
) dans une variable dans bash. J'ai essayé comme ça, mais ça ne marche pas :
home_mf = ${home//(\)//(/)}
Par exemple, je voudrais
\a\b\c -> /a/b/c
Je veux remplacer le backslash( \
) avec une barre oblique ( /
) dans une variable dans bash. J'ai essayé comme ça, mais ça ne marche pas :
home_mf = ${home//(\)//(/)}
Par exemple, je voudrais
\a\b\c -> /a/b/c
La substitution correcte est
home_mf="${home//\\//}"
Elle se décompose comme suit :
//
remplacer chaque\\
barre oblique inversée/
avec/
barre obliqueDémonstration :
$ t='\a\b\c'; echo "${t//\\//}"
/a/b/c
Une alternative qui pourrait être plus facile à lire serait de citer le modèle et le remplacement :
home_mf="${home//'\'/"/"}"
Cela va le faire :
home_mf=${home//\//\\} # forward to backward slash
home_mf=${home//\\//} # backward to forward slash
Par exemple :
$ **cat slash.sh**
#!/bin/bash
set -x
home=**/aa/bb/cc**
home\_mf=${home//\\//\\\\}
echo $home\_mf
home\_mf=${home\_mf//\\\\//}
echo $home\_mf
$ **./slash.sh**
+ home=aa/bb/cc
+ home\_mf='\\aa\\bb\\cc'
+ echo '\\aa\\bb\\cc'
**\\aa\\bb\\cc**
+ home\_mf=/aa/bb/cc
+ echo /aa/bb/cc
**/aa/bb/cc**
El ${variable/..}
La syntaxe est ksh
, bash
et éventuellement d'autres shells spécifiques mais qui ne sont pas présents dans tous les shells basés sur la syntaxe Bourne Shell, par exemple dash
. Si vous voulez une méthode portable (POSIX), vous pouvez utiliser sed
à la place :
home_mf=$(printf "%s" "$home" | sed 's/\//\\/g') # forward to backward slash
home_mf=$(printf "%s" "$home_mf" | sed 's/\\/\//g') # backward to forward slash
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.