bash:把列表文件放入一个variables中,但是数组的大小是1

我列出了一个目录中的文件,并通过它们循环,但我需要知道有多less。 $ {#dirlist [@]}总是1,但是对于循环工作?

#!/bin/bash prefix="xxx"; # as example len=${#prefix}; # string length dirlist=`ls ${prefix}*.text`; qty=${#dirlist[@]}; # sizeof array is always 1 for filelist in $dirlist do substring="${filelist:$len:-5}"; echo "${substring}/${qty}"; done 

我有文件xxx001.text upto xxx013.text
但我得到的是001/1 002/1 003/1

 dirlist=`ls ${prefix}*.text` 

不会创建数组,它只会生成一个空格分隔的文件名。

你必须做

 dirlist=(`ls ${prefix}*.text`) 

使其成为一个数组。

然后$ dirlist将只引用第一个元素,你必须使用

 ${dirlist[*]} 

在循环中引用它们全部。

除非用( )包围它,否则不会创建数组:

 dirlist=(`ls ${prefix}*.text`) 
 dir=/tmp file_count=`ls -B "$dir" | wc -l` echo File count: $file_count 
 arr=(~/myDir/*) 

使用计数器遍历数组

 for ((i=0; i<${#arr[@]}; i++)); do #do something to each element of array echo "${arr[$i]}" done