0

可能重复:
Bash 脚本中的命令输出到下拉框?

我在 bash 脚本中有一个数组。我已经配置了 apache2,所以我可以在我的 cgi-bin 目录中运行 cgi/bash 脚本,它们会像网页一样显示。

有什么方法可以获取数组的每个元素并使其成为页面上的下拉框的结果?

例如,如果我的数组看起来像:

a[0] = "255" 
a[1] = "254" 
a[2] = "253"
a[3] = "252"
a[4] = "251"

我希望保管箱看起来像(大声笑,ASCII)

 _____
|255  |
|254  |
|253  |
|252  |
|251  |
 -----

有什么建议么?谢谢你的帮助。

4

2 回答 2

0

稍微简单(但更冗长)的解决方案:

box()
{
    local -a a=(1 20 300 4000 50000)
    local -i w=0

    for i in "${a[@]}"
    do
        [ $w -lt $i ] && w="${#i}"
    done

    printf -- '-%.s' $(seq $w)
    printf -- '---\n'

    for i in "${a[@]}"
    do
        printf -- '|%-'$w's |\n' $i
    done

    printf -- '-%.s' $(seq $w)
    printf -- '---\n'
}
于 2011-08-03T09:20:39.950 回答
0

您可以编写一个 bash for 循环来完成所有操作。这只是打印出元素:

for i in `seq 1 "${#x[*]}"`; do
    echo "|${x[i]} |"
done

为了使对齐正确,您需要计算出最大长度(一个循环),然后打印出条款:

# w will be the length
w=0
for i in `seq 1 "${#x[*]}"`; do
    if [ $w -lt ${#x[$i]} ]; then w=${#x[$i]}; fi
done
for i in `seq 1 $((w+2))`; do printf "%s" "-"; done
printf "\n"
for i in `seq 1 "${#x[*]}"`; do
    printf "|%-$ws |\n" ${#x[$i]}
done
for i in `seq 1 $((w+2))`; do printf "%s" "-"; done
printf "\n"
于 2011-08-02T16:39:14.877 回答