首页 > 解决方案 > 使用命令作为结束索引 valrible 运行 for 循环

问题描述

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

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

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

{0..14}

标签: linuxbashshell

解决方案


你可以使用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

推荐阅读