2017-04-24 188 views
-1

我一直在試圖創建一個變量來保存其他值的值以及要發佈的命令。我已經找到了兩個sitatuons個人的答案,但我努力把它們放在一起。Bash - 帶變量和命令的變量

下面的$ DID和$ SECTOR是已經建立的兩個變量。

DATAPARMS=$($DID,$SECTOR,date,uptime | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/',ls -I README.txt /var/www/html | wc -l,grep "VERSION" /root/config | grep -o '".*"' | sed 's/"//g') 

單個命令(grep,sed等)可以忽略。

我會那麼喜歡回聲稱之爲:

echo "$DATAPARMS" 

就如何更好地做到這一點的任何指針?非常感謝你!

+2

參見[BashFAQ#50](http://mywiki.wooledge.org/BashFAQ/050)(「我想在一個變量把一個命令,但複雜的情況總是失敗!「) –

+0

Bash變量不允許嵌套結構 - 數組內部不能有數組。試圖用bash來完成複雜的結構化數據將成爲一個問題。 – Barmar

回答

1

BashFAQ #50所述,不應使用變量來存儲代碼。使用函數來代替,如下所示:

getDataParams() { 
    echo "$DID,$SECTOR,date,uptime" | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/' 
    ls -I README.txt /var/www/html | wc -l 
    grep "VERSION" /root/config  | grep -o '".*"' | sed 's/"//g' 
} 

getDataParams 
+0

關於如何將sed應用到「正常運行時間」並將所有內容保留在1行內的任何建議? – t988GF

+0

'foo(){uptime | sed'...'; }' - 關於將函數定義全部放在同一行上的唯一值得注意的事情是,您需要結束在關閉「}」之前的任何命令(如使用';'或'&'),否則它會被解析爲論據。 –

+1

這就是說,作爲一項規則,我建議不要使用單線 - 清晰度通常比簡潔更有價值。 –