如何在bash中迭代数组

时间:2017-07-21 07:04:24

标签: arrays bash

我有很多阵容,想要拿每个并检查它的长度。

#!/bin/bash

arr1=(1 2 3 4)
arr2=(foo)
arrN=(1 2 3 4 a b c d)
for arr in $arr1 $arr2 $arrN
do
        echo "${#arr[@]}" # $arr1 must be 4, right? Wrong.
        if [ ${#arr[@]} == 1 ]
        then echo "short"
        elif [ ${#arr[@]} >= 4 ]
        then echo "long"
        else echo "so so"
        fi
done

但是我得到了我没想到的输出。

kusayu@laptop:~$ ./test.sh
1
short
1
short
1
short

我想我明白为什么它会像那样工作,但不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

Bash不支持多维数组。

因此for arr in $arr1 $arr2 $arrN无效。

以下代码可以使用:

arr1=(1 2 3 4)
echo "${#arr1[@]}" # $arr1 is 4

您可以编写一个返回数组长度的函数(和/或打印您想要的输出):

function myArrLen {
        arr=("$@")
        echo "${#arr[@]}"
        echo "Some other stuff you want to do.."
    }

arrA=(1, 2, 3, 4, 5)
arrB=(1, 2, 3)

myArrLen "${arrA[@]}"
myArrLen "${arrB[@]}"