在 bash 中检索数组长度时出错

Error on retrieving array length in bash

我一直在尝试 运行 一个简单的脚本来检索可变大小目录的倒数第二个子目录。但它无法检索它的长度。脚本如下:

ARRAY=$(ls files-0/var/log/)

echo ${#ARRAY[@]}

for i in ${#ARRAY[@]};
do
    echo $i
done

我得到的输出是:

1

1

如果我换行

for i in ${#ARRAY[@]};

来自

for i in $ARRAY;

至少我得到了 directories/files:

的列表
53513
53514
53515
...

我知道有很多帖子讨论这个问题,但大多数都是从正确获取数组长度的基础开始的。

这应该有效

for dir in "${ARRAY}[@]"
do
  echo "$dir"
done

你能举例说明你想要什么吗?input/output

根据评论,在 BASH 中初始化索引数组值的语法是:

array=( element1 element2 etc... )

在您的情况下,您只是将命令替换的结果分配给数组:

ARRAY=$(ls files-0/var/log/)

(将 ls files-0/var/log/ 的 return 分配给名为 ARRAY 的变量)

ARRAY 使用命令替换的正确初始化是:

ARRAY=( $(ls files-0/var/log/) )

注意:当数组声明为declare -a somename时,或者用值初始化后,可以在下次打开时向数组添加元素索引:

ARRAY+=( somevalue )  # quoted as necessary

从 BASH 4 开始,您还有 Associative Arrays(声明 -A),它允许使用 key value 对创建数组,而不是简单的 index value 对。其中初始化为:

AARRAY=( [key1]=value1 [key2]=value2 etc... )

祝你好运BASH,这是一个非常有能力的shell。