A substituição do caractere em branco não está funcionando dentro do script

1

Em um script de shell, tentei substituir o espaço em branco por \ n com este comando

echo -e $var |tr ' ' '\n'

Fora do roteiro funcionou perfeitamente, mas por dentro não há nenhum efeito. Como eu uso no script:

var =$(echo -e $var | tr ' ' '\n' )

Obrigado.

    
por isoman 08.08.2012 / 17:42

2 respostas

3

Após expandir uma expansão de parâmetro ( $var ) ou substituição de comando ( $(cmd) ), o shell remove todos os espaços em branco do resultado expandido para dividi-los em palavras (divisão de palavras). Além disso, ele tenta corresponder nomes de arquivos para as palavras que contêm * , ? e / ou [...] (expansão do nome do caminho). Então, sempre inclui expansões entre aspas duplas ( "$var" e "$(cmd)" ) para evitar que a divisão de palavras e a expansão do nome do caminho sejam tentadas.

$ var=$'two\nlines   here'
$ echo $var
two lines here
$ echo "$var"
two
lines   here
$

Por isso:

echo "$var" | tr ' ' '\n'
# or using bash's more powerful types of parameter expansions
echo "${var// /$'\n'}"

var="$(echo "$var" | tr ' ' '\n')"

Veja também: link

    
por geirha 08.08.2012 / 18:28
1

No manual de Bash ( man bash ):

  

A substituição de comandos permite a saída de um comando para substituir   nome do comando. Existem duas formas:

     

$ (comando)

     

ou

     

'comando'

     

Bash realiza a expansão executando command e substituindo o   substituição de comando com a saída padrão do comando, com   qualquer nova linha final excluída .

É por isso que os caracteres da nova linha são perdidos.

    
por Eric Carvalho 08.08.2012 / 18:28