J'apprends le Bash et je veux remplacer les caractères d'espace par d'autres caractères "non vides". J'utilise une for
boucle:
for f in *\ *; do mv "$f" "${f// /_}"; done
Ma question est, pourquoi la double barre oblique et l'espace sont-ils là ${f// /_}
? Que fait ${f// /_}
-il?
Réponses:
C'est un modèle de remplacement utilisant l'
bash
expansion des paramètres.Dans
${f// /_}
:Les doubles barres obliques
//
servent à remplacer toutes les occurrences d'espace avec_
, si vous mettez une barre oblique/
, seul le premier espace va être remplacéL'espace est là parce que vous remplacez l'espace (avec un trait de soulignement)
Donc, le modèle est essentiellement:
Cochez
man bash
pour avoir plus d'idée.Pour accéder à la
Parameter Expansion
sectionman bash
à la fois:la source
La section
"{f// /_}
signifie remplacer chaque espace par et souligner. Ceci utilise l'expansion du paramètre Bash, la variablef
définie dans lefor f in *\ *;
sera exécutée pour chaque correspondance d'expansion du shell (globbing). Chaque fois que le nom de fichier trouvé deviendra la valeur$f
.L'expansion des paramètres fonctionne avec la
//
signification de chaque occurrence du caractère suivant//
(espace dans cet exemple), doit être remplacée par le caractère après/
(soulignement dans cet exemple).la source