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

13

Estou aprendendo Bash e quero substituir os caracteres de espaço por outros caracteres "não vazios". Estou usando um for loop:

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

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

    
por Pretenderus 15.03.2016 / 15:44

2 respostas

14

Isso é um padrão de substituição usando a expansão do parâmetro bash .

Em ${f// /_} :

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

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

O padrão é basicamente:

${parameter//find/replace}

Verifique man bash para ter mais ideia.

Para chegar à seção Parameter Expansion de man bash de uma só vez:

LESS=+/'Parameter Expansion' man bash
    
por heemayl 15.03.2016 / 15:48
3

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

A expansão de parâmetro funciona com // , significando que todas as ocorrências do caractere após // (espaço neste exemplo) devem ser substituídas pelo caractere após / (sublinhado neste exemplo).

    
por Arronical 15.03.2016 / 15:51

Tags