我正在尝试使用awk将命令链的输出存储在变量中,但结果不完整,
这就是我想要做的事情。
nameserver="nas_server -list all | awk '{print $6}'"
eval $nameserver
nameserverreal=$nameserver |awk '/encap|nameserver_/{ print }'
eval $nameserverreal
我正在使用此命令nas_server并使用awk print 6,只从命令nas_server获取一些输出。
我需要的是稍后使用“nameserver_”过滤输出 并将输出存储在一个变量中,这样我就可以打印出来,并在以后用其他命令将其用完。
答案 0 :(得分:2)
您似乎混淆了存储命令输出与存储命令本身的文本(这几乎总是一个坏主意)。我不确定你要做什么(或nas_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
,这表明事情已经发生了可怕的错误。