我想在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
答案 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