存储命令在bash中作为变量输出
我试图用awk将命令链的输出存储在变量中,但结果不完整 这就是我想做的存储命令在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获得一些
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进行过滤。无论如何,非常感谢戈登