2017-08-17 85 views
0

林裝盤即可存儲在一個變量使用awk一個COMAND鏈的輸出,但結果卻是不完整的,存儲命令對應的可變輸出在bash

這是林裝盤做。

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

我使用這個命令nas_server和awk打印6,只從我的命令nas_server得到一些輸出。

我需要的是以後的輸出只能用「nameserver_」 和存儲在一個變量輸出濾波器,這樣我就可以打印出來,並用它後來與其他命令對應convined。

任何想法?謝謝

+7

是的 - 不要這樣做。根據需要編寫函數或別名,不要評估存儲在變量中的字符串。 –

+0

你可以把過濾器放在你的awk命令中,awk'/ nameserver_/{print $ 6}' –

回答

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,這是一個跡象表明某些事情已經發生了可怕的錯誤。

+0

謝謝你的回覆,我想也是一樣,但是我在這個答案中看到他們使用的是eval https:// stackoverflow。 com/questions/5615717/how-to-store-a-command-in-a-variable-in-linux所以我試了一下。 。 Teman的想法是捕獲輸出,然後只使用sarvername進行過濾。無論如何,謝謝戈登 –