存储命令输出为 bash 中的变量



我正在尝试将带有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_"过滤输出 并将输出存储在一个变量中,以便我可以打印它,并在以后与其他命令一起使用它。

您似乎混淆了存储命令的输出和存储命令本身的文本(这几乎总是一个坏主意(。我不确定您要做什么(或者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,这表明出了可怕的错误。

最新更新