使用 Eval 将变量设置为等于多行字符串

问题描述 投票:0回答:1

我正在尝试使用 eval 设置多行变量

$ k="A
B
C"

$ echo "$k"
A
B
C

$ eval 'k="1
2
3"'

$ echo "$k"
1
2
3

但是我想使用 awk 通过 awk 脚本生成我的变量

$ echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}' 
awkV="1
2
3"

$ eval `echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`
$ echo "$awkV"
1 2 3

$ eval '`echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`'
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file
bash: awkV="-bash"}`: command not found...

我需要在 eval 语句周围加上某种引号,但我在内部使用单引号和双引号,单引号可能会弄乱我在脚本内使用的“$k”。我尝试将执行的代码放入定界符中,但没有成功,尽管也许我做错了。

如有帮助和建议,我们将不胜感激。

请注意,这只是问题的一个最小示例,而不是我的完整应用程序。



bash awk eval
1个回答
0
投票
$ eval "$(echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\047"$0"\047"}')"

$ echo "$awkV"
A
B
C
© www.soinside.com 2019 - 2024. All rights reserved.