我已经得到以下工作:
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作为数组的另一端,而不是字符串的一部分?
当前回答
这里它在Mac OS X上工作。
它包括一个BSD日期的例子,如何增加和减少日期:
for ((i=28; i>=6 ; i--));
do
dat=`date -v-${i}d -j "+%Y%m%d"`
echo $dat
done
其他回答
这里它在Mac OS X上工作。
它包括一个BSD日期的例子,如何增加和减少日期:
for ((i=28; i>=6 ; i--));
do
dat=`date -v-${i}d -j "+%Y%m%d"`
echo $dat
done
如果seq命令在您的系统上可用:
for i in `seq 2 $max`
do
echo "output: $i"
done
如果不是,那么在perl中使用poor man's seq:
seq=`perl -e "\$,=' ';print 2..$max"`
for i in $seq
do
echo "output: $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
括号展开,{x..Y}在其他展开之前执行,因此不能将其用于可变长度序列。
相反,使用用户mob声明的seq 2 $max方法。
所以,在你的例子中,它会是:
max=10
for i in `seq 2 $max`
do
echo "$i"
done
好吧,因为我没有在我的系统上安装seq命令(Mac OS X v10.6.1 (Snow Leopard)),我最终使用了while循环:
max=5
i=1
while [ $max -gt $i ]
do
(stuff)
done
*耸耸肩*只要有用就行。