Como fazer bash tratar variáveis como strings utilizando a substituição de processos

1

Eu tenho a afirmação:

A=$(echo "echo a") && bash -c "awk -v var=\"$A\" 'BEGIN {printf \"%20s\", var}'"

Quais resultados:

          echo az

E eu não posso fazer este trabalho de uma linha:

A=$(echo "echo a") && bash -c "paste <(awk -v var="$A" 'BEGIN {printf \"%-200s\n\", var}') <(echo "BBBB") --delimiters ''"

a 'BEGIN {printf "%-200s\n", var}') <(echo BBBB) --delimiters '': -c: line 0: unexpected EOF while looking for matching ')'
a 'BEGIN {printf "%-200s\n", var}') <(echo BBBB) --delimiters '': -c: line 1: syntax error: unexpected end of file

Eu presumo que isso seja porque "$A" não é tratado como uma variável. Alguém pode me explicar isso? Obrigado!

    
por Mindaugas Bernatavičius 14.07.2016 / 15:08

1 resposta

3

Isso parece estar funcionando:

A=$(echo "echo a") && bash -c "paste <(awk -v var=\"$A\" 'BEGIN { printf \"%s\", var }') <(echo 'BBBB')"

Mas, eu imploro, nunca escreva nada assim. É simplesmente nojento, faz os olhos das pessoas sangrarem. Por favor, use uma linguagem de programação real como Ruby / Python / Perl se seus scripts de shell estão se tornando mais complexos, então uma lista de comandos e algumas declarações "if" e / ou maiores podem caber em uma tela. Caso contrário, seria muito divertido depurá-lo e apoiá-lo posteriormente ou para outra pessoa.

    
por 14.07.2016 / 15:34

Tags