spr*_*aff 46 bash for-loop brace-expansion
这是myscript.sh
#!/bin/bash
for i in {1..$1};
do
echo $1 $i;
done
Run Code Online (Sandbox Code Playgroud)
如果我运行myscript.sh 3输出是
3 {1..3}
Run Code Online (Sandbox Code Playgroud)
代替
3 1
3 2
3 3
Run Code Online (Sandbox Code Playgroud)
显然$3包含正确的值,为什么不像for i in {1..$1}我for i in {1..3}直接写的一样?
jor*_*anm 67
你应该使用C风格的for循环来完成这个:
for ((i=1; i<=$1; i++)); do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
这避免了外部命令和令人讨厌的eval语句.
Oli*_*rth 27
因为大括号扩展发生在变量扩展之前.http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion.
如果你想使用大括号,你可能会有这样的事情:
for i in `eval echo {1..$1}`;
do
echo $1 $i;
done
Run Code Online (Sandbox Code Playgroud)
简介:Bash很卑鄙.
kev*_*kev 15
您可以使用seq命令:
for i in `seq 1 $1`
Run Code Online (Sandbox Code Playgroud)
或者您可以使用C风格for...loop:
for((i=1;i<=$1;i++))
Run Code Online (Sandbox Code Playgroud)