bash 以目录长度循环

bash do loop with length of directory

我正在尝试遍历目录中的文件名,以便对每个文件名执行操作。

如果我使用:

,我只能遍历 10 个文件名
var=($(ls directory))
for k in {1..10}
do
    echo ${var[$k]}
done

它给出了我目录中的前 10 个文件名。但是,我想循环遍历它们。

如果我这样做:

length=($(ls directory -1 | wc -l))

我得到了长度(对于这个例子,它是 62)

因此,当我将所有内容组合在一起时:

var=($(ls directory))
length=($(ls directory -1 | wc -l))
for k in {1..$length} 
do
    echo ${var[$k]}
done

我收到错误“语法错误:预期操作数(错误标记为“{1..62}”)

任何解决此问题的帮助或更好的解决方案将不胜感激!

括号扩展由 shell 在变量扩展之前执行,因此您收到错误。

您可以使用:

for k in $(seq 1 "$length")

解决这个问题。


此外,您可以通过以下方式轻松完成您正在做的事情:

files=( * )
for i in "${files[@]}"; do echo "$i"; done

或更简单:

printf '%s\n' "${files[@]}"

为什么不简单:

for file in *; do
  if [ -f "$file" ]; then
    echo "Do what you want with" "$file"; 
  fi
done