使用命令作为结束索引运行for循环

时间:2020-05-18 12:21:15

标签: linux bash shell

我想在bash中运行for循环,其中结束索引是命令的结果

    ├── LICENSE
    ├── makefile
    ├── protos
    │   ├── client.proto
    │   └── person.proto
    ├── README.md
    └── src
        ├── db_handler
        │   ├── db_handler.cc
        │   └── db_handler.h
        ├── main.cc
        └── protos
            ├── client.grpc.pb.cc
            ├── client.grpc.pb.h
            ├── client.pb.cc
            ├── client.pb.h
            ├── person.grpc.pb.cc
            ├── person.grpc.pb.h
            ├── person.pb.cc
            └── person.pb.h

但是当我运行它时,我看到:

#!/bin/bash
# Basic range in for loop
for value in {0..$(ls | wc -l)}   
do
echo $value
done

1 个答案:

答案 0 :(得分:1)

您可以使用eval

for value in $(eval echo {0..$(ls | wc -l)})   
do
echo $value
done

seq与bash的花括号类似,seq的主要优点是它的参数不仅可以包括如上所示的算术表达式,而且可以包含shell变量

for value in $(seq 1 `ls | wc -l`);
do
    echo ${value}
done

通过对比,大括号符号将不接受。

seq是GNU实用程序,可在所有linux系统以及OSX的最新版本中使用。较早的BSD系统可以使用类似的实用程序jot

C-Style-漂亮而简单:

for ((value = 1 ; value <= $(ls | wc -l) ; value++)); do
  echo ${value}
done