假设我想在 shell 中创建一个整数范围数组,以便该数组:
- 开始于
$START_VALUE
- 结束于
$END_VALUE
- 元素分开
$STEP_SIZE
,从 开始$START_VALUE
。
对于任何熟悉 Python 的人来说,我正在有效地寻找range
Bourne shell 中的对应项,特别是 Zsh 中的对应项。
是否有任何 shell 内置插件可以在这里提供帮助?
注意:Python 的range
函数支持递增和递减范围数组(即,其中$START_VALUE
大于或小于$END_VALUE
)。
答案1
就像在 bash 中一样,在 zsh 中,这有效:
printf '%s ' {2..23..3}; echo
因为这也有效:
set -- {2..23..3}
for i
do echo "$i"
done
像这样:
set -- {2..23..3}
for i; do
echo "$i"
done
像这样:
for i in {0..20..2}
do
echo "$i"
done
在 zsh 中有效但在 bash 中无效的是变量范围:
a=2 b=23 c=3
set -- {$a..$b..$c}
for i
do echo $i
done
答案2
在 bash 和 zsh 中,您可以使用 {START..STOP..INCRMENT},当 START < STOP 时它会按预期工作。例如,
for i in {0..20..2}
do
echo $i
done
打印出 0, 2, 4, 6, ..., 20。在 bash 中,您还可以通过将其更改为 {20..0..-2} 来执行“向后”范围,这将打印 20, 18, 16, 。 .., 2, 0。但这对 zsh 不起作用。
对 bash 和 zsh 都有效的方法是使用 seq。
for i in `seq 20 -2 0`;
do
echo $i
done
打印出 20, 18, 16, ..., 0(在 bash 和 zsh 中)。这里的格式是FIRST,STEP,LAST(其中STEP是可选的,如果省略则变成1)。