我有很多阵容,想要拿每个并检查它的长度。
#!/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
我想我明白为什么它会像那样工作,但不知道如何解决它。
答案 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[@]}"