如何使用进程替换让 bash 将变量视为字符串

如何使用进程替换让 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')"

但是,我恳求你,永远不要写这样的内容。这简直太恶心了,让人的眼睛流血。如果您的 shell 脚本变得比命令列表和几个“if”语句更复杂,并且/或者比一个屏幕长,请使用像 Ruby/Python/Perl 这样的真正的编程语言。否则,稍后或为其他人调试和支持这些会非常有趣。

相关内容