Che cosa significa la doppia barra in `$ {f // / _}`?


17

Sto imparando Bash e voglio sostituire i caratteri spaziali con altri caratteri "non vuoti". Sto usando un forciclo:

for f in *\ *; do mv "$f" "${f// /_}"; done

La mia domanda è: perché la doppia barra e lo spazio sono dentro ${f// /_}? Cosa fa ${f// /_}?


3
Se non hai bisogno di impararlo a memoria, dovresti almeno sapere dove leggerlo: è nel manuale di Bash .
Glenn Jackman,

Risposte:


19

Questo è un modello di sostituzione che utilizza l' bashespansione dei parametri.

In ${f// /_}:

  • Le doppie barre //servono a sostituire tutte le occorrenze dello spazio con _, se si inserisce una barra /, verrà sostituito solo il primo spazio

  • Lo spazio è lì perché stai sostituendo lo spazio (con trattino basso)

Quindi lo schema è sostanzialmente:

${parameter//find/replace}

Controlla man bashper avere più idee.

Per accedere alla Parameter Expansionsezione di man bashsubito:

LESS=+/'Parameter Expansion' man bash

2
In breve, è una ricerca globale e sostituisce.
Glenn Jackman,

3

La sezione "{f// /_}significa sostituire ogni spazio con e trattino basso. Questo utilizza l'espansione del parametro Bash, la variabile fdefinita in for f in *\ *;verrà eseguita per ogni corrispondenza dell'espansione della shell (globbing). Ogni volta che il nome file trovato diventerà il valore $f.

L'espansione del parametro funziona con il //significato che ogni occorrenza del carattere seguente //(spazio in questo esempio), deve essere sostituito dal carattere dopo /( carattere di sottolineatura in questo esempio).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.