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

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

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

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

有没有更简洁的方法呢?


当前回答

bash配置文件中的一个简单函数(~/。Bashrc经常)可以很好地工作。

function runx() {
  for ((n=0;n<$1;n++))
    do ${*:2}
  done
}

这样叫它。

$ runx 3 echo 'Hello world'
Hello world
Hello world
Hello world

其他回答

for _ in {1..10}; do command; done   

注意使用下划线而不是变量。

这有点天真,但这是我通常能立即想到的:

for i in 1 2 3; do
  some commands
done

和@joe- kobberg的回答很相似。他的更好,特别是当你需要很多重复的时候,只是更难记住其他语法,因为在过去的几年里,我不经常使用bash。我的意思是至少不是写脚本。

使用常量:

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

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

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

如果你的范围有一个变量,使用seq,像这样:

count=10
for i in $(seq $count); do
    command
done

简单:

for run in {1..10}; do
  command
done

或者作为一行程序,供那些想要轻松复制和粘贴的人使用:

for run in {1..10}; do command; done

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