我想打印从 1 到 100 的数字列表,并使用如下所示的 for 循环:
number=100
for num in {1..$number}
do
echo $num
done
Run Code Online (Sandbox Code Playgroud)
当我执行命令时,它只打印 {1..100} 而不是从 1 到 100 的数字列表。
Sté*_*las 26
是的,那是因为大括号扩展发生在参数扩展之前。既可以使用另一壳状zsh或ksh93或使用替代的语法:
i=1
while [ "$i" -le "$number" ]; do
echo "$i"
i=$(($i + 1))
done
Run Code Online (Sandbox Code Playgroud)
for ((...))for ((i=1;i<=number;i++)); do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
eval(不推荐)eval '
for i in {1..'"$number"'}; do
echo "$i"
done
'
Run Code Online (Sandbox Code Playgroud)
seq在可用的系统上使用 GNU命令unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
(那个效率较低,因为它派生并运行一个新命令并且外壳必须从管道读取其输出)。
在 shell 脚本中使用循环通常表明您做得不对。
最有可能的是,您的代码可以用其他方式编写。
为此,您甚至不需要 for 循环,只需使用以下seq命令:
$ seq 100
Run Code Online (Sandbox Code Playgroud)
这是打印出来的前 10 个数字:
$ seq 100 | head -10
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)