我列出了一个目录中的文件,并通过它们循环,但我需要知道有多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