我正在尝试做一件看似简单的事情:一个从命令行获取变量($1)并将其用作 for 循环的长度的脚本。因此,如果命令是终端中的 run.sh:
run.sh 5
将运行 for 循环 5 次。这是我的尝试:
#!/bin/sh
for i in {1..$1};do
echo $i
done
但我收到的唯一输出是:
{1..5}
我该如何解决这个问题?
注意:我完全是 bash/shell 脚本编写的初学者。
最佳答案
你真的在使用bash shell吗?并非所有 shell(尤其是真正的/bin/sh (bourne) )都支持该功能。要消除您的情况的歧义,请使用
#!/bin/bash
位于脚本的顶部。
一种解决方案是使用
for i in $(eval echo {1..$1} ); do echo $i; done
eval
表示,“对于当前命令字符串,在本例中 echo ${1..$1}
,暂不执行该命令,重新评估任何可扩展变量的完整命令行。”
如果您的系统有seq
cmd,那么您可以将其重写为
for i in $(seq 1 $1 ); do echo $i; done
seq
是序列的缩写,可以采用任何开始和结束数字,以及可选的“跳过”因子,sa seq 0 5 100
将按 5 进行计数到 100。
我希望这会有所帮助。
关于shell - shell 行为中指定大小的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314391/