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



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

最新更新