bash:将列表文件放入变量中,但数组大小为1

Way*_*ood 10 unix linux bash shell

我将文件列在目录中并循环浏览它们,但我需要知道它们有多少.$ {#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
Run Code Online (Sandbox Code Playgroud)

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

小智 25

dirlist=`ls ${prefix}*.text`
Run Code Online (Sandbox Code Playgroud)

不创建数组,它只是一个空格分隔文件名的字符串.

你必须做

dirlist=(`ls ${prefix}*.text`)
Run Code Online (Sandbox Code Playgroud)

使它成为一个数组.

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

${dirlist[*]}
Run Code Online (Sandbox Code Playgroud)

在循环中引用它们.

  • 使用`"$ {dirlist [@]}"`而不是`$ {dirlist [*]}来防止名称包含空格的文件. (10认同)
  • 请不要使用`ls`!`dirlist =($ {prefix}*.text)`更简单,更不容易出错. (3认同)

dil*_*had 5

声明一个文件数组:

arr=(~/myDir/*)
Run Code Online (Sandbox Code Playgroud)

使用计数器迭代数组:

for ((i=0; i < ${#arr[@]}; i++)); do

  # [do something to each element of array]

  echo "${arr[$i]}"
done
Run Code Online (Sandbox Code Playgroud)