Skip to content

Remplacez la barre oblique inverse (“”) par une barre oblique (“/”) dans une variable de bash

Solution:

La substitution correcte est

home_mf="${home//\//}"

Celui-ci se décompose comme suit :

  • // remplacer chaque
  • \ barre oblique inverse
  • / avec
  • / sabrer

Manifestation:

$ t="abc"; echo "${t//\//}"
/a/b/c

Une alternative qui peut être plus facile à lire serait de citer le modèle et le remplacement :

home_mf="${home//'"https://advancedweb.fr/"https://advancedweb.fr/"}"

Cela le fera :

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="aabbcc"
+ echo 'aabbcc'
aabbcc
+ home_mf=/aa/bb/cc
+ echo /aa/bb/cc
/aa/bb/cc

Les ${variable/..} la syntaxe est ksh, bash, et éventuellement d’autres shells spécifiques mais n’est pas présent dans tous les shells basés sur la syntaxe du shell Bourne, par exemple dash. Si vous voulez un moyen portable (POSIX), vous pouvez utiliser sed au lieu:

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



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.