it-swarm-es.tech

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

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

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

Mi pregunta es, ¿por qué la barra doble y el espacio en ${f// /_}? ¿Qué hace ${f// /_}?

15
Pretenderus

Eso es un patrón de reemplazo usando bash expansión de parámetros.

En ${f// /_}:

  • Las barras 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}

Marque man bash para tener más idea.

Para llegar a la sección Parameter Expansion de man bash a la vez:

LESS=+/'Parameter Expansion' man bash
16
heemayl

La sección "{f// /_} significa reemplazar cada espacio con y subrayar. Esto está utilizando la expansión del parámetro Bash, la variable f definida en 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 //, lo que significa que cada aparición del carácter que sigue a // (espacio en este ejemplo), debe reemplazarse por el carácter después de / (subrayado en este ejemplo).

3
Arronical