¿Qué significa la barra doble en `$ {f // / _}`?


17

Estoy aprendiendo Bash, y quiero reemplazar los caracteres de espacio con otros caracteres "no en blanco". Estoy usando un forbucle:

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

Mi pregunta es, ¿por qué están el doble corte y el espacio ${f// /_}? ¿Qué ${f// /_}hacer?


3
Si no necesita aprenderlo de memoria, al menos debe saber dónde leerlo: está en el manual de bash .
Glenn Jackman

Respuestas:


19

Eso es un patrón de reemplazo usando la bashexpansión de parámetros.

En ${f// /_}:

  • Las barras diagonales dobles //son para reemplazar todas las apariciones de espacio con _, si coloca una barra inclinada /, solo se reemplazará el primer espacio

  • El espacio está ahí porque está reemplazando el espacio (con guión bajo)

Entonces el patrón básicamente es:

${parameter//find/replace}

Comprueba man bashpara tener más idea.

Para llegar a la Parameter Expansionsección de man bashuna vez:

LESS=+/'Parameter Expansion' man bash

2
En resumen, es una búsqueda y reemplazo global .
Glenn Jackman

3

La sección "{f// /_}significa reemplazar cada espacio con y subrayar. Esto está utilizando la expansión del parámetro Bash, la variable fdefinida en el for f in *\ *;se ejecutará para cada coincidencia de expansión de shell (globbing). Cada vez que el nombre de archivo encontrado se convertirá en el valor $f.

La expansión de parámetros funciona con el //significado de que cada aparición del siguiente carácter //(espacio en este ejemplo), debe reemplazarse por el carácter posterior /(subrayado en este ejemplo).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.