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