我想产生对一些摘要信息linux盒的状态的报告。我用JPS来填充运行我们的应用程序实例的名称多个阵列。然后我想在4列打印这些分类排列,所以我们可以看到什么是容易运行。

我使用一些条件逻辑以确定哪个数组长度是最长的。因为某些阵列比其它短,通过最长值简单循环可引起阵列索引超出范围的问题。所以我想在有该行没有值的列打印一个空string。

下面的代码是什么,我现在有,但是,当它试图执行循环内的命令时,它抛出"Command not found"错误。我们的想法是尝试和使用条件逻辑来确定当前的数组越界,如果是只打印""。

我试着用``使其显示为代码。我没有他们试图为好。我试过没有" "并与他们。我试着用$ {}周围的变量和不带。我也试着用()周围的价值观和无。

我不太理解发生了什么这个代码和脚本上是为一个命令行linux框中Windows机器代码的幕后不容易调试。有什么建议么?

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,没有一个值的数组元素可以访问,并且将返回未定义的值,这将被显示为空的string。有没有必要检查各个数组索引的限制。

从技术上讲,有与环中的printf的引用多个问题。替代方案:

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

旁注:这种做法将对maxRows进行的限制,因为这将需要list 1个2 3 ... maxRows进行以适应单行。对于上限

for ((i=1 ;; i<=maxRows ; i++) ; do
    printf ...
done