存储命令在bash中作为变量输出

存储命令在bash中作为变量输出,bash,shell,perl,awk,Bash,Shell,Perl,Awk,我试图用awk将命令链的输出存储在变量中,但结果不完整 这就是我想做的 nameserver="nas_server -list all | awk '{print $6}'" eval $nameserver nameserverreal=$nameserver |awk '/encap|nameserver_/{ print }' eval $nameserverreal 我使用这个命令nas\u server,使用awk print 6,只能从我的命令nas\u server获得一些

我试图用awk将命令链的输出存储在变量中,但结果不完整

这就是我想做的

nameserver="nas_server -list all |  awk '{print $6}'"
eval $nameserver
nameserverreal=$nameserver |awk '/encap|nameserver_/{  print }'
eval $nameserverreal
我使用这个命令nas\u server,使用awk print 6,只能从我的命令nas\u server获得一些输出

我需要的是在以后只使用“nameserver_389;”过滤输出
并将输出存储在一个变量中,这样我就可以打印它,并在以后与其他命令一起使用。

您似乎混淆了存储命令输出与存储命令本身的文本(这几乎总是一个坏主意)。我不确定您到底想做什么(或者
nas\u server-list all
的输出是什么样子),但我怀疑您想要这样的东西:

nameserver="$(nas_server -list all |  awk '{print $6}')"   # $() captures the output of a command
echo "$nameserver"  # Double-quote all variable references to avoid parsing weirdness!
nameserverreal="$(echo "$nameserver" |awk '/encap|nameserver_/{  print }')"
echo "$nameserverreal"
以下是一个简化版本:

nameserverreal="$(nas_server -list all |  awk '$6 ~ /encap|nameserver_/ {print $6}'"

哦,任何时候你想在shell脚本中使用
eval
,这都是出了严重错误的迹象。

你似乎把存储命令输出和存储命令本身的文本混淆了(这几乎总是个坏主意)。我不确定您到底想做什么(或者
nas\u server-list all
的输出是什么样子),但我怀疑您想要这样的东西:

nameserver="$(nas_server -list all |  awk '{print $6}')"   # $() captures the output of a command
echo "$nameserver"  # Double-quote all variable references to avoid parsing weirdness!
nameserverreal="$(echo "$nameserver" |awk '/encap|nameserver_/{  print }')"
echo "$nameserverreal"
以下是一个简化版本:

nameserverreal="$(nas_server -list all |  awk '$6 ~ /encap|nameserver_/ {print $6}'"

哦,任何时候当你想在shell脚本中使用
eval
时,这都是一个迹象,表明有些东西出了严重错误。

是的,不要这样做。根据需要编写函数或别名,不要求值存储在变量中的字符串。您可以将筛选器放在awk命令中,以便awk'/nameserver_u/{print$6}'是-不要这样做。根据需要编写函数或别名,不要求值存储在变量中的字符串。您可以将筛选器放入awk命令中,因此awk'/nameserver_/{print$6}'谢谢您的回复,我也这么认为,但我在这个答案中看到它们正在使用eval,所以我尝试了。TeMan的想法是捕获输出,然后仅使用sarvername进行过滤。无论如何,非常感谢Gordon谢谢你的回复,我也这么想,但我在这个回答中看到他们正在使用eval,所以我尝试了一下。TeMan的想法是捕获输出,然后仅使用sarvername进行过滤。无论如何,非常感谢戈登