作者:农大军乐团_697 | 2023-08-25 10:57
在bash中迭代范围的方法是
for i in {0..10}; do echo $i; done
使用步骤迭代序列的语法是什么?说,我想在上面的例子中得到偶数.
1> chaos..:
我会做
for i in `seq 0 2 10`; do echo $i; done
(虽然当然seq 0 2 10
会自己产生相同的输出).
请注意,seq
允许浮点数(例如seq .5 .25 3.5
),但bash的大括号扩展只允许整数.
我会冒险猜测downvote是由于你的答案是'sh'的通用,而不是'bash'特有的.纯粹的Bash方法{开始结束步骤}执行得更好.较旧的'seq'方法在较旧或较小内存系统(如busybox)上很方便.我做了你和TheBonsai的回答.:)
最好在反引号中使用$(...)。反引号不会嵌套。
2> TheBonsai..:
Bash 4的支撑扩展有一个步骤特征:
for {0..10..2}; do
..
done
无论是Bash 2/3(C-style for loop,见上面的答案)还是Bash 4,我都更喜欢'seq'命令.
这应该是答案.
这些论点可能会或可能不会对你有用:*有足够的系统没有GNU coreutils(但安装了Bash)*你创建了一个不需要的外部进程*你依赖于所有'seq'做你'seq'所做的事情的想法*它是没有标准化的ISO
@becko如果步骤存储在变量“ i”中,那么对于{0..10 .. $ {i}}`..您将无法执行它。
Bash4仍然不是主流,没有.为什么不seq?好吧,让我们用IRC频道#bash中的机器人的话来说:"seq(1)是一个高度非标准的外部命令,用于在愚蠢的Linux howtos中数到10."
3> Fritz G. Meh..:
纯粹的Bash,没有额外的过程:
for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
echo $COUNTER
done
+1因为步骤也可以由变量替换.
4> z -..:
#!/bin/bash
for i in $(seq 1 2 10)
do
echo "skip by 2 value $i"
done
FWIW seq在我的标准OS X Mavericks 10.9.1中可用