Expansão do parâmetro Bash para remover as guias

0

Eu tenho essa linha no script:

TATVAR=$(echo $PARAMVAR|sed -e 's/^[ \t]*//')

Eu gostaria de diminuir isso para não executar programa adicional (sed), shellcheck sugeriu-me que eu deveria usar:

${variable//search/replace}

Eu tentei muitos regexps mas parece que não funciona. Alguém tem ideia de como fazer isso?

    
por Mateusz Pacek 02.09.2015 / 11:43

2 respostas

2

Você pode usar "${PARAMVAR//$'\t'/}" , mas observe que esse é um recurso bash, portanto, outros shells podem não suportá-lo. Isso significa iniciar seu script com #!/bin/bash , não #!/bin/sh (e não executá-lo com sh scriptname ).

$ PARAMVAR=$'space: tab:\tlinefeed:\nend'
$ echo "$PARAMVAR"
space: tab: linefeed:
end
$ echo "${PARAMVAR//$'\t'/}"
space: tab:linefeed:
end

Para comparação, usar [[:blank:]] também eliminará os espaços:

$ echo "${PARAMVAR//[[:blank:]]/}"
space:tab:linefeed:
end

E você deve sempre agrupar referências de variáveis entre aspas duplas, ou então todo espaço em branco é tratado como quebras de palavras (e echo então os transformará em espaços):

$ echo $PARAMVAR
space: tab: linefeed: end
    
por 02.09.2015 / 18:10
0

Acabei de conseguir isso por:

TATVAR="${PARAMVAR//[[:blank:]]/}"

Eu ficaria feliz se alguém puder confirmar que está correto.

    
por 02.09.2015 / 12:06

Tags