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

时间:2017-08-17 15:13:31

标签: bash shell perl awk

我正在尝试使用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_”过滤输出 并将输出存储在一个变量中,这样我就可以打印出来,并在以后用其他命令将其用完。

1 个答案:

答案 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,这表明事情已经发生了可怕的错误。