我偶尔会像这样运行bash命令行:

n=0; while [[ $n -lt 10 ]]; do some_command; n=$((n+1)); done

在一行中运行some_command多次——在本例中为10次。

通常some_command实际上是一个命令链或管道。

有没有更简洁的方法呢?


当前回答

脚本文件

bash-3.2$ cat test.sh 
#!/bin/bash

echo "The argument is  arg: $1"

for ((n=0;n<$1;n++));
do
  echo "Hi"
done

下面是输出

bash-3.2$  ./test.sh 3
The argument is  arg: 3
Hi
Hi
Hi
bash-3.2$

其他回答

另一种简单的破解方法:

seq 20 | xargs -Iz echo "Hi there"

执行echo命令20次。


注意seq 20 | xargs -Iz echo“Hi there z”将输出:

大家好! 大家好 ...

Xargs和seq会有所帮助

function __run_times { seq 1 $1| { shift; xargs -i -- "$@"; } }

视图:

abon@abon:~$ __run_times 3  echo hello world
hello world
hello world
hello world

使用常量:

for ((n=0;n<10;n++)); do
    some_command; 
done

使用变量(可以包括数学表达式):

x=10; for ((n=0; n < (x / 2); n++)); do some_command; done

使用GNU Parallel你可以做到:

parallel some_command ::: {1..1000}

如果您不希望将数字作为参数,并且一次只运行一个作业:

parallel -j1 -N0 some_command ::: {1..1000}

观看介绍视频快速介绍: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览本教程(http://www.gnu.org/software/parallel/parallel_tutorial.html)。命令行 用爱你换吧。

所有现有的答案似乎都需要bash,并且不能使用标准的BSD UNIX /bin/sh(例如,OpenBSD上的ksh)。

下面的代码可以在任何BSD上运行:

$ echo {1..4}
{1..4}
$ seq 4
sh: seq: not found
$ for i in $(jot 4); do echo e$i; done
e1
e2
e3
e4
$