O que a barra dupla significa em `$ {f // / _}`?


17

Estou aprendendo Bash e quero substituir caracteres de espaço por outros caracteres "não em branco". Estou usando um forloop:

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

Minha pergunta é: por que estão a barra dupla e o espaço ${f// /_}? O que ${f// /_}faz?


3
Se você não precisa aprender de cor, pelo menos deve saber onde ler sobre isso: está no manual do bash .
Glenn Jackman

Respostas:


19

Esse é um padrão de substituição usando a bashexpansão de parâmetros.

Em ${f// /_}:

  • As barras duplas //são para substituir todas as ocorrências de espaço por _, se você colocar uma barra /, apenas o primeiro espaço será substituído

  • O espaço existe porque você está substituindo o espaço (com sublinhado)

Portanto, o padrão é basicamente:

${parameter//find/replace}

Marque man bashpara ter mais ideia.

Para acessar a Parameter Expansionseção de man bashuma só vez:

LESS=+/'Parameter Expansion' man bash

2
Em suma, é uma pesquisa global e substitui.
Glenn Jackman

3

A seção "{f// /_}significa substituir todos os espaços com e sublinhado. Isso está usando a expansão do parâmetro Bash, a variável fdefinida no for f in *\ *;será executada para cada correspondência de expansão do shell (globbing). Cada vez que o nome do arquivo encontrado se tornará o valor $f.

A expansão do parâmetro funciona com o //significado de cada ocorrência do caractere a seguir //(espaço neste exemplo), deve ser substituída pelo caractere depois /(sublinhado neste exemplo).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.