我想在 bash 中运行一个 for 循环,其中结束索引是命令的结果
#!/bin/bash
# Basic range in for loop
for value in {0..$(ls | wc -l)}
do
echo $value
done
但是当我运行它时,我看到:
{0..14}
您可以使用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风格-漂亮而简单:
for ((value = 1 ; value <= $(ls | wc -l) ; value++)); do
echo ${value}
done