Как заставить bash обрабатывать переменные как строки, используя подстановку процессов
У меня есть утверждение:
A=$(echo "echo a") && bash -c "awk -v var=\"$A\" 'BEGIN {printf \"%20s\", var}'"
Какие выводы:
echo az
И я не могу заставить эту однострочную работу:
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
Я полагаю, это потому, что "$A"
не рассматривается как переменная. Может кто-то объяснить это мне. Спасибо!
1 ответ
Кажется, это работает:
A=$(echo "echo a") && bash -c "paste <(awk -v var=\"$A\" 'BEGIN { printf \"%s\", var }') <(echo 'BBBB')"
Но, прошу вас, никогда не пишите ничего подобного. Это просто грубо, это заставляет людей кровоточить. Пожалуйста, используйте настоящий язык программирования, такой как Ruby/Python/Perl, если ваши сценарии оболочки становятся более сложными, чем список команд и несколько операторов "если" и / или длиннее, чем могут поместиться на одном экране. В противном случае было бы очень весело отлаживать и поддерживать их позже или для кого-то еще.