這個問題在這里已經有了答案: 將命令的輸出讀入 Bash 中的陣列 5 個答案 9 小時前關閉。
我是腳本新手,我想監視記憶體使用率最高的前 2 個行程,并保留不是 mysqld 的行程串列。
我在下面寫了一個腳本,
lines=$(ps aux --sort rss | head -n 3)
echo $lines
for line in $lines
do
echo $line
done
并發現它列印的是單詞而不是行。
如何在變數行中保存一行?
uj5u.com熱心網友回復:
您根本沒有創建陣列。的語法看起來像
lines=($(ps aux --sort rss | head -n 3))
其中內部$(...)是一個命令替換,它簡單地擴展為一系列標記(不是行!),外括號宣告一個陣列。
完全可能一個更好的解決方案是直接回圈輸出ps。僅當您出于某種原因需要重復遍歷值時(例如按不同標準對它們進行排序,或對它們進行多次回圈),將結果收集到陣列中才有用。
ps aux --sort rss | head -n 3
或者如果你想進一步裝飾輸出,也許
ps aux --sort rss | head -n 3 |
while IFS= read -r line; do
echo "the output was $line with proper quoting"
done
(雖然在值周圍有一個靜態裝飾,但也許只是更喜歡ps aux --sort rss | head -n 3 | sed 's/.*/the output was & with some decorations/')。
使用最新版本的 Bash,您可以使用readarray -t.
readarray -t lines < <(ps aux --sort rss | head -n 3)
for line in "${lines[@]}"; do # notice proper array syntax
echo "$line" # notice proper quoting
done
陣列語法有點奇怪,但需要與原始 Bourne shell 向后兼容,其中$lines始終參考單個字串值。
(readarray是 Bash v4 ,因此目前在 MacOS 上不可用。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455974.html
