我想設置一個返回值,所以一旦它進入while循環:在bash中,如何設置返回碼?
#!/bin/bash
while [ $? -eq 1 ]
do
#do something until it returns 0
done
爲了得到這個工作,我需要在一開始設定$? = 1
,但不起作用。
我想設置一個返回值,所以一旦它進入while循環:在bash中,如何設置返回碼?
#!/bin/bash
while [ $? -eq 1 ]
do
#do something until it returns 0
done
爲了得到這個工作,我需要在一開始設定$? = 1
,但不起作用。
#!/bin/bash
RC=1
while [ $RC -eq 1 ]
do
#do something until it returns 0
RC=$?
done
我想你可以通過運行註定要失敗,進入while
循環之前的命令隱含做到這一點。
典型的這樣的命令當然是false
。
會是這樣的東西是你在找什麼?
#!/bin/bash
TEMPVAR=1
while [ $TEMPVAR -eq 1 ]
do
#do something until it returns 0
#construct the logic which will cause TEMPVAR to be set 0 then check for it in the
#if statement
if [ yourcodehere ]; then
$TEMPVAR=0
fi
done
false
總是通過在子shell參數執行exit
返回1.
#!/bin/bash
false
while [ $? -eq 1 ]
do
#do something until it returns 0
done
您可以設置任意退出代碼退出代碼。
$ (exit 42); echo "$?"
42
所以,你可以這樣做:
(exit 1) # or some other value > 0 or use false as others have suggested
while (($?))
do
# do something until it returns 0
done
或者你可以emulate a do while
loop:
while
# do some stuff
# do some more stuff
# do something until it returns 0
do
continue # just let the body of the while be a no-op
done
那些要麼保證循環至少運行一次我相信這是你的目標是。
應該是'$(出口42);回聲「$?「' –
@ElliotChance:我的答案中的美元符號代表提示並按原樣工作,你提出的建議也可以工作,但沒有必要。 –
應完全接受此答案! – Tony
您可以使用until
來處理情況,比1或0其他#do something until it returns 0
回報什麼情況:
#!/bin/bash
false
until [ $? -eq 0 ]
do
#do something until it returns 0
done
一些答案依靠重寫代碼。在某些情況下,它可能是您無法控制的外部代碼。
雖然對於這個特定的問題,設置$就足夠了?到1,但如果你需要設置$?以任何價值 - 唯一有用的答案是丹尼斯威廉姆森的答案。
一點更有效的方法,它不產生一個新的子(而且是一個也不太簡潔),是:
function false() { echo "$$"; return ${1:-1}; }
false 42
注:回聲部分是有,只是爲了驗證它在當前的進程中運行。
老問題,但有一個更好的答案:
#!/bin/bash
until
#do something until it returns success
do
:;
done
如果你循環,直到事情是成功的,那麼就做什麼的,直到一節。你可以在你認爲必須放入do/done部分的部分放入完全相同的代碼。您不必在do/done部分編寫代碼,然後將其結果傳回到while或until。
保證* fail *的命令在這裏需要:'false'。 – chepner
@chepner D'oh!謝謝,當然固定。 – unwind