Que signifie la double barre oblique dans `$ {f // / _}`?

17

J'apprends le Bash et je veux remplacer les caractères d'espace par d'autres caractères "non vides". J'utilise une forboucle:

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?

Pretenderus
la source
3
Si vous n'avez pas besoin de l'apprendre par cœur, vous devriez au moins savoir où le lire: c'est dans le manuel bash .
glenn jackman

Réponses:

19

C'est un modèle de remplacement utilisant l' bashexpansion 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:

${parameter//find/replace}

Cochez man bashpour avoir plus d'idée.

Pour accéder à la Parameter Expansionsection man bashà la fois:

LESS=+/'Parameter Expansion' man bash
heemayl
la source
2
En bref, c'est une recherche globale et remplacer.
glenn jackman
3

La section "{f// /_}signifie remplacer chaque espace par et souligner. Ceci utilise l'expansion du paramètre Bash, la variable fdéfinie dans le for 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).

Arronical
la source