我将文件列出在目录中,并循环遍历它们,但是我需要知道也有多少文件。 $ {#dirlist [@]}始终为1,但是for循环有效吗?

#!/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至xxx013.text
但我得到的只是001/1 002/1 003/1

最佳答案

这个:

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

不做数组。它仅使文件名以空格分隔。

你必须做
dirlist=(`ls ${prefix}*.text`)

使其成为数组。

然后$dirlist将仅引用第一个元素,因此您必须使用
${dirlist[*]}

在循环中引用所有它们。

关于linux - bash : put list files into a variable and but size of array is 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15224535/

10-10 23:57