我将文件列出在目录中,并循环遍历它们,但是我需要知道也有多少文件。 $ {#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/