我想打印从 1 到 100 的数字列表,我使用 for 循环,如下所示:
number=100
for num in {1..$number}
do
echo $num
done
当我执行该命令时,它只打印 {1..100} 而不是 1 到 100 的数字列表。
答案1
是的,那是因为大括号扩展发生在参数扩展之前。使用另一个 shell,例如zsh
orksh93
或使用替代语法:
标准 (POSIX) sh 语法
i=1
while [ "$i" -le "$number" ]; do
echo "$i"
i=$(($i + 1))
done
Ksh式for ((...))
for ((i=1;i<=number;i++)); do
echo "$i"
done
使用eval
(不推荐)
eval '
for i in {1..'"$number"'}; do
echo "$i"
done
'
seq
在可用的系统上使用 GNU命令
unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
echo "$i"
done
(该命令的效率较低,因为它分叉并运行一个新命令,并且 shell 必须从管道读取其输出)。
避免 shell 中出现循环。
在 shell 脚本中使用循环通常表明您做得不正确。
最有可能的是,您的代码可以用其他方式编写。
答案2
您甚至不需要 for 循环,只需使用以下seq
命令:
$ seq 100
例子
这是打印出来的前 10 个数字:
$ seq 100 | head -10
1
2
3
4
5
6
7
8
9
10
答案3
您可以使用以下内容:
for (( num=1; num <= 100; num++ ))
do
echo $num
done
答案4
大括号扩展仅适用于文字整数或单个字符。它发生在变量扩展之前,因此不能在其中使用变量。