簡體   English   中英

使用 bash 腳本在不同的列中打印多個不同大小的 arrays

[英]Print multiple different sized arrays in different columns using bash script

我正在嘗試生成有關 linux 框的 state 的報告,其中包含一些摘要信息。 我使用 jps 使用正在運行的應用程序實例的名稱填充多個 arrays。 然后我想在 4 列中打印這些排序的 arrays 以便我們可以輕松查看運行的內容。

我使用一些條件邏輯來確定哪個數組長度最長。 因為一些 arrays 比其他的短,簡單循環最長的值會導致數組索引越界問題。 所以我想在該行沒有值的列中打印一個空字符串。

下面的代碼是我目前擁有的,但是當它嘗試在循環內執行命令時會拋出“找不到命令”錯誤。 這個想法是嘗試使用條件邏輯來確定當前數組是否超出范圍,如果是,則打印“”。

我嘗試使用 ` 使其顯示為代碼。 我也試過沒有它們。 我試過沒有“”和他們。 我試過在變量周圍使用 ${ } 而沒有。 我也嘗試使用 ( ) 圍繞值和不使用。

我不太了解此代碼的幕后發生了什么,並且在 Windows 機器代碼上編寫腳本,該機器代碼用於命令行 linux 框不容易調試。 有什么建議么?

printf "| %-40s | %-40s | %-40s | %-40s |\n" "Array 1:" "Array 2:" "Array 3:" "Array 4:" >> ${OUTPUT}
for i in $(seq ${maxRows}); do
    (The command below is all on one line but to make it more readable here I entered on multiple.)
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "`[[ ${i} > ${#Array1[@]} ]] && ("") ||
    ("${Array1[$i]}")`" "`[[ $i > ${#Array2[@]} ]] && "" || ${Array2[$i]}`" "`[[ $i > ${#Array3[@]} ]] 
    && "" || ${Array3[$i]}`" "`[[ $i > ${#Array4[@]} ]] && "" || ${Array4[$i]}`" >> ${OUTPUT}
done

在 bash 中,可以訪問沒有值的數組元素,並且將返回未定義的值,該值將顯示為空字符串。 無需檢查單個數組索引限制。

從技術上講,在循環中引用 printf 存在多個問題。 選擇:

for i in $(seq ${maxRows}); do
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "${Array1[$i]}" "${Array2[$i]", "${Array4[$i]}" "${Array3[$i]}" >> $OUTPUT
done

旁注:這種方法將施加 maxRows 的限制,因為它將要求列表 1 2 3... maxRows 適合單行。 對於更高的限制

for ((i=1; i<=maxRows; i++)); do
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "${Array1[$i]}" "${Array2[$i]", "${Array4[$i]}" "${Array3[$i]}" >> $OUTPUT
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM