在一个循环中运行两个序列

HIS*_*ISI 8 command-line bash sh

我试图在我的 shell 中的同一个循环中运行两个序列,如下所示:

#!/bin/bash
for i in (1..15) and (20..25) ;
do
     echo $i
     ......
     .....other process
done
Run Code Online (Sandbox Code Playgroud)

知道我怎么能做到这一点吗?

Zan*_*nna 10

你只需要大括号扩展

$ for n in {1..3} {200..203}; do echo $n; done
1
2
3
200
201
202
203
Run Code Online (Sandbox Code Playgroud)

我们可以将列表传递给for( )。for i in x y z; do stuff "$i"; done

所以在这里,大括号{ }让 shell 将您的序列扩展为一个列表。您只需要在它们之间放置一个空格,因为 shell 会拆分这些参数列表。


pa4*_*080 6

或者,我们可以使用seq打印数字序列),这里有两个等效的示例:

for i in `seq 1 3` `seq 101 103`; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
for i in $(seq 1 3) $(seq 101 103); do echo $i; done
Run Code Online (Sandbox Code Playgroud)

如果是脚本,对于重复性的任务,可以使用函数:

#!/bin/bash
my_function() { echo "$1"; }
for i in {1..3}; do my_function "$i"; done
for i in {101..103}; do my_function "$i"; done
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
my_function() { for i in `seq $1 $2`; do echo "$i"; done; }
my_function "1" "3"
my_function "101" "103"
Run Code Online (Sandbox Code Playgroud)