如何在bash for循环中使用变量?

for i in {0..3}
do
   echo "do some stuff $i"
done

这个很好用.它循环4次,0到3次,打印我的信息并将计数放在最后.

do some stuff 0
do some stuff 1
do some stuff 2
do some stuff 3

当我用下面的for循环try 同样的事情时,它似乎等于一个字符串,这不是我想要的.

length=3
for i in {0..$length}
do
   echo "do something right $i"
done

输出:

do something right {0..3}

我试过了

for i in {0.."$length"} 和 for i in {0..${length}} (both output was {0..3})

for i in {0..'$length'} (output was {0..$length})

和 they both don't do what I need. Hopefully someone can help me. Thanks in advance for any bash expert's help with for loops.

推荐答案

一种方法是使用eval:

for i in $( eval echo {0..$length} )
do
       echo "do something right $i"
done

Note当你设定length=;lslength=; rm *时会发生什么(但不要try 后者).

safely,使用seq:

for i in $( seq 0 $length )
do
       echo "do something right $i"
done

也可以使用c-style for循环,这也是安全的:

for (( i = 0; i <= $length; i++ )) 
do 
       echo "do something right $i"
done

Linux相关问答推荐

为什么我们不能使用${$#}来获取传递给shell 脚本的最后一个参数?

Linux-如何区分目录中名称相同但扩展名不同的所有文件

为什么库中不调用全局变量的构造函数?

重命名具有相同前缀的文件对中最旧的文件

在 bash 中使用 tee 时如何返回错误代码

从 MariaDB 连接到 Oracle 时出现错误消息libsqora.so.11.1:找不到文件

使用 PowerShell 删除重复行所需的时间比 WSL 长得多

仅在 Linux 上出现 AWS RDS `flush tables` 错误的 mysqldump

如何在 DolphinDB 中递归查找目录中的所有文件?

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

更改 awk 中的上一个重复行

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

将文件的一部分插入到另一个文件的特定位置

如何指定链接时使用的库版本?

C hello world 的汇编输出的每一行是什么意思?

禁用内存地址的随机化

如何删除 Mercurial 存储库

使用inotify的正确方法是什么?

如何在字符串中查找子字符串(或如何 grep 变量)?

如何安排 tcpdump 在特定时间段内运行?