Bash seq在for循环中产生两个独立的数字序列
我想创建一个简单的bash循环,它迭代一系列具有特定间隔的数字,然后是不同的数字序列,例如
for i in $(seq 0 5 15) do echo $i done 但是在通过i = 0,5,10,15进行交互之后,我希望它能够反复说出30,35,40,45. 有没有办法用seq做到这一点?还是另类? 解决方法
方法1
只需在另一个seq调用中扩充$(…)中的命令: for i in $(seq 0 5 15; seq 30 5 45); do echo $i done 然后 $bash test.sh 0 5 10 15 30 35 40 45 #方法2 在你的后续评论中,你写了
作为上述方法的替代方法,您可以为这200行定义shell函数,然后在一系列for循环中调用该函数: f() { # 200 lines echo $i } for i in $(seq 0 5 15) do f done for i in $(seq 30 5 45) do f done 方法3(符合POSIX标准) 为了实现shell的最大可移植性,您应该使脚本符合POSIX标准.在这种情况下,您需要避免使用seq,因为尽管许多发行版提供了该实用程序,但它并未由POSIX定义. 由于你不能使用seq来生成迭代的整数序列,并且因为POSIX没有定义数字,C风格的for循环,所以你必须求助于while循环.为避免重复与该循环相关的代码,您可以定义另一个函数(在下面称为custom_for_loop): custom_for_loop() { # $1: initial value # $2: increment # $3: upper bound # $4: name of a function that takes one parameter i=$1 while [ $i -le $3 ]; do $4 $i i=$((i+$2)) done } f() { printf "%sn" "$1" } custom_for_loop 0 5 15 f custom_for_loop 30 5 45 f (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |