Answers:
博客是对的。但是,重要的是要准确地注意语法:如果你正在使用交互式shell(例如终端)
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
“$?” 返回上一个函数调用的状态; 因为我们首先调用“echo”,所以循环的第一次迭代将是“true”(bash中为0)。“fi”关闭“if”语句,并且分号是必需的。
如果您正在编写一个bash脚本,这是同样的事情:
{ !/ bin / bash
echo -n
for i in {1..5}; 这样做
如果[[$?]]; 然后
foo
fi
完成
你会注意到foo之后没有分号; 当在可用换行符的环境中编写完整的bash脚本时(例如你最喜欢的文本编辑器),换行符与分号相同:)
另外,请注意您可以改为使用
[[ $? ]] && foo
而不是if语句; 意识到&&意味着只有在前一个foo没有错误的情况下才会执行foo。即在函数调用中
thing1 && thing2
如果thing1运行正常(技术上,如果它返回0值)以忽略foo是否正常工作,则只会执行thing2,使用分号代替&&
你尝试过使用“for”循环吗?
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
done
for>
我发现了一个伟大的方法在这里。
我知道它仍然是“一种脚本”,但我认为它是最接近你没有用命令输入整个命令行就可以得到的。
您可以创建repeat
用于执行此操作的命令:
repeat 5 ./foo
~/.bashrc
将以下行添加到您的结尾(如果您使用的是bash):
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
并在下次登录(或启动bash)时使用repeat 5 ./foo
。
顺便说一句。repeat
在csh,tcsh和zsh中已经是一个关键字(完全相同),所以通过这个添加,你将它添加到bash
它,它将完全相同。
for
,你可以使用watch
,如在此提到的StackOverflow问题