Thiago Caminha da Silva wrote:
>     VAR1=`echo ${VAR2[$X]//\\\\/\\\ }`
> 
> Quando uso este "echo" que está rodando no sub-shell na linha de comando, 
> ele me retorna corretamente, mas quando rodo ele numa sub-shell como no 
> exemplo acima ao invés de ter como resultado "texto\ texto\ texto" eu tenho 
> "texto\texto\texto".

Os marcadores `...` impõem um nível adicional de escape, para que você
possa usar "\`" para inserir um "`" no comando.

Prefira usar o operador $(...) sempre que possível. Tem várias vantagens
em relação ao `...`:

1. não precisa de um nível adicional de escape, uma vez que "(" e ")" já
são operadores do shell;
2. é visualmente mais distinto do que o "'", não causando confusões, não
importa a fonte que você use para editar o arquivo;
3. você pode empilhar vários $( ) um dentro do outro de forma mais elegante.

No manual do bash, seção 3.5.4 (Command Substitution) fala sobre isso.

        ~$ VAR2='texto\texto\texto'
        ~$ echo $VAR2
        texto\texto\texto
        ~$ echo ${VAR2//\\/\\\ }
        texto\ texto\ texto
        ~$ VAR1=$(echo ${VAR2//\\/\\\ })
        ~$ echo $VAR1
        texto\ texto\ texto

Note como o resultado é consistente. Note que você só precisa fazer o
escape da barra-invertida uma vez dentro do comando.

-- 
Juliano F. Ravasi ·· http://juliano.info/
5105 46CC B2B7 F0CD 5F47 E740 72CA 54F4 DF37 9E96

"A candle loses nothing by lighting another candle." -- Erin Majors

* NOTE: Don't try to reach me through this address, use "contact@" instead.
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a