Estoy aprendiendo Bash, y quiero reemplazar los caracteres de espacio con otros caracteres "no en blanco". Estoy usando un for
bucle:
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?
Respuestas:
Eso es un patrón de reemplazo usando la
bash
expansió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 espacioEl espacio está ahí porque está reemplazando el espacio (con guión bajo)
Entonces el patrón básicamente es:
Comprueba
man bash
para tener más idea.Para llegar a la
Parameter Expansion
sección deman bash
una vez:fuente
La sección
"{f// /_}
significa reemplazar cada espacio con y subrayar. Esto está utilizando la expansión del parámetro Bash, la variablef
definida en elfor 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).fuente