我偶尔会像这样运行bash命令行:
n=0; while [[ $n -lt 10 ]]; do some_command; n=$((n+1)); done
在一行中运行some_command多次——在本例中为10次。
通常some_command实际上是一个命令链或管道。
有没有更简洁的方法呢?
我偶尔会像这样运行bash命令行:
n=0; while [[ $n -lt 10 ]]; do some_command; n=$((n+1)); done
在一行中运行some_command多次——在本例中为10次。
通常some_command实际上是一个命令链或管道。
有没有更简洁的方法呢?
当前回答
所有现有的答案似乎都需要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
$
其他回答
还有另一个答案:在空参数上使用参数展开:
# calls curl 4 times
curl -s -w "\n" -X GET "http:{,,,}//www.google.com"
在Centos 7和MacOS上测试。
这有点天真,但这是我通常能立即想到的:
for i in 1 2 3; do
some commands
done
和@joe- kobberg的回答很相似。他的更好,特别是当你需要很多重复的时候,只是更难记住其他语法,因为在过去的几年里,我不经常使用bash。我的意思是至少不是写脚本。
for _ in {1..10}; do command; done
注意使用下划线而不是变量。
如果你正在使用zsh shell:
repeat 10 { echo 'Hello' }
其中10是命令将被重复执行的次数。
使用常量:
for ((n=0;n<10;n++)); do
some_command;
done
使用变量(可以包括数学表达式):
x=10; for ((n=0; n < (x / 2); n++)); do some_command; done