Le plus robuste, mais peut-être le plus simple, consiste simplement à remplacer tous les deux-points à l' /bin:
aide de l'extension de paramètre:
foo=/my/path/one:/my/path/two:/my/path/three
noo=${foo//:/\/bin:}/bin
echo $noo
/my/path/one/bin:/my/path/two/bin:/my/path/three/bin
Explication:
La syntaxe ${foo}
vous permet de rechercher et de remplacer de nombreux types dans la variable. Dans ce cas, nous utilisons une correspondance de modèle, les modèles étant séparés par des barres obliques. Normalement, vous pourriez faire quelque chose comme ça:
$(foo/findme/replace}
qui va chercher la chaîne findme
dans $foo
et le remplacer par replace
.
Pour échanger les deux points avec x
, vous pouvez rechercher avec ${foo/:/x/}
mais pour tout remplacer et pas seulement le premier, vous mettez deux barres obliques au début. Pour utiliser une barre oblique dans le remplacement, vous devez y échapper avec une barre oblique inverse.\/
Tous ensemble, cela nous donne le modèle utilisé ci-dessus (espaces ajoutés pour plus de clarté mais ils le briseraient dans la vie réelle):
<find> <replace>
${foo // : / \/bin: }
Le reste appartient à l'histoire.