[英]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.