[英]Fibonacci & for loop: how are the commands executed step by step? (Bash shell script)
[英]How to lazy evaluate commands in a shell for loop
我想實現一個后備機制:如果一個命令失敗,請嘗試下一個或下一個(或下一個)。 可以有許多命令以相同的方式處理。 下面的實現(簡化的錯誤處理應該更好,但這不是當前問題)在評估for循環內容之前運行所有命令。 我如何使它變得懶惰?
f() {
for message in $(cmd0) $(cmd1) $(cmd2) # cmd1, cmd2 should evaluate lazily
do
if [ $? == 0 ]
then
echo "ok: $message"
return # exit early
fi
done
echo "error: $message"
}
假設您的命令cmd0
, cmd1
在成功運行時返回0
,而在失敗時返回非零,您可以執行以下操作
f() {
for cmd in cmd0 cmd1 cmd2; do
if "$cmd"; then
echo "ok: $message"
return
fi
done
}
參見示例,運行命令true
, false
分別返回代碼0
和1
,
f() {
for cmd in false true; do
echo "running command $cmd"
if "$cmd"; then
echo "ok: $message"
return
fi
done
}
運行它,
f
running command false
running command true
ok:
你也可以做
f() { cmd0 || cmd1 || cmd2; }
僅當cmd0
失敗時才評估cmd1
,僅在cmd0
和cmd1
失敗時才評估cmd2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.