我已经得到以下工作:
for i in {2..10}
do
echo "output: $i"
done
它产生了一系列的输出行:2,输出:3,等等。
然而,试图运行以下程序:
max=10
for i in {2..$max}
do
echo "$i"
done
产生以下结果:
output: {2..10}
我怎样才能让编译器意识到它应该把$max作为数组的另一端,而不是字符串的一部分?
我已经得到以下工作:
for i in {2..10}
do
echo "output: $i"
done
它产生了一系列的输出行:2,输出:3,等等。
然而,试图运行以下程序:
max=10
for i in {2..$max}
do
echo "$i"
done
产生以下结果:
output: {2..10}
我怎样才能让编译器意识到它应该把$max作为数组的另一端,而不是字符串的一部分?
当前回答
这是一种方式: Bash:
max=10
for i in $(bash -c "echo {2..${max}}"); do echo $i; done
当Bash -c分别被ksh -c或zsh -c取代时,上述Bash方式也适用于ksh和zsh。
注:对于i在{2..${max}};执行echo $i;在ZSH和ksh中做功。
其他回答
有不止一种方法。
max=10
for i in `eval "echo {2..$max}"`
do
echo "$i"
done
这些都做{1..8},并且都应该是POSIX。他们也不会打破如果你 在循环中放入一个条件continue。规范的方式:
f=
while [ $((f+=1)) -le 8 ]
do
echo $f
done
另一种方法:
g=
while
g=${g}1
[ ${#g} -le 8 ]
do
echo ${#g}
done
另一个:
set --
while
set $* .
[ ${#} -le 8 ]
do
echo ${#}
done
这是一种方式: Bash:
max=10
for i in $(bash -c "echo {2..${max}}"); do echo $i; done
当Bash -c分别被ksh -c或zsh -c取代时,上述Bash方式也适用于ksh和zsh。
注:对于i在{2..${max}};执行echo $i;在ZSH和ksh中做功。
我们可以像C编程一样迭代循环。
#!/bin/bash
for ((i=1; i<=20; i=i+1))
do
echo $i
done
Use:
max=10
for i in `eval echo {2..$max}`
do
echo $i
done
你需要显式的“eval”调用来重新计算变量替换后的{}。