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

时间:2015-02-24 11:45:36

标签: bash shell sh

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

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;

至少我得到了目录/文件列表:

53513
53514
53515
...

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

2 个答案:

答案 0 :(得分:0)

跟进注释,在BASH中初始化索引数组值的语法是:

array=( element1 element2 etc... )

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

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

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

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

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

注意:当使用declare -a somename声明数组时,或者在使用值初始化数组之后,您可以在下一个打开的索引中向数组添加元素:

ARRAY+=( somevalue )  # quoted as necessary

从BASH 4开始,您还拥有Associative Arrays(声明-A),允许使用key value对创建数组,而不是简单index {{ 1}}对。初始化在哪里:

value

祝BASH好运,它是一个非常强大的外壳。

答案 1 :(得分:-1)

这应该有效

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

您能举例说明您想要的输入/输出吗?