How to make bash treat variables as strings using process substitution

I have the statement:

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

Which outputs:

          echo az

And I can't make this one-liner work:

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

I presume this is because "$A" is not treated as a variable. Can someone explain this to me. Thanks!

1
задан 14 July 2016 в 16:08
1 ответ

Кажется, это работает:

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

Но, прошу вас, никогда не пишите ничего подобного. Это просто отвратительно, от этого у людей текут глаза. Пожалуйста, используйте настоящий язык программирования, такой как Ruby / Python / Perl, если ваши сценарии оболочки становятся более сложными, тогда список команд и несколько операторов «если» и / или длиннее, чем могут поместиться на одном экране. В противном случае было бы очень УДОВОЛЬСТВИЕ отлаживать и поддерживать их позже или для кого-то еще.

3
ответ дан 3 December 2019 в 18:33

Теги

Похожие вопросы