我一直在尝试运行一个简单的脚本来检索可变大小目录的倒数第二个子目录。但它无法找回它的长度。该剧本如下:
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
...
我知道有很多帖子接近这个问题,但大多数都是从正确获取数组长度的基础开始的。
答案 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
您能举例说明您想要的输入/输出吗?