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

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

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

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

有没有更简洁的方法呢?


当前回答

还有另一个答案:在空参数上使用参数展开:

# calls curl 4 times 
curl -s -w "\n" -X GET "http:{,,,}//www.google.com"

在Centos 7和MacOS上测试。

其他回答

另一种简单的破解方法:

seq 20 | xargs -Iz echo "Hi there"

执行echo命令20次。


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

大家好! 大家好 ...

使用常量:

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

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

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

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

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

这样叫它。

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

还有另一个答案:在空参数上使用参数展开:

# calls curl 4 times 
curl -s -w "\n" -X GET "http:{,,,}//www.google.com"

在Centos 7和MacOS上测试。

首先,你可以把它封装在一个函数中:

function manytimes {
    n=0
    times=$1
    shift
    while [[ $n -lt $times ]]; do
        $@
        n=$((n+1))
    done
}

这样称呼它:

$ manytimes 3 echo "test" | tr 'e' 'E'
tEst
tEst
tEst