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?

Respuestas:
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 espacioEl espacio está ahí porque está reemplazando el espacio (con guión bajo)
Entonces el patrón básicamente es:
Comprueba
man bashpara tener más idea.Para llegar a la
Parameter Expansionsección deman bashuna vez:fuente
La sección
"{f// /_}significa reemplazar cada espacio con y subrayar. Esto está utilizando la expansión del parámetro Bash, la variablefdefinida 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