1
ok="1"
test -f no_such_file || (ok='0' && echo ggg)
> ggg
echo $ok
> 1
爲什麼$ok
仍然1
?在這種情況下,我怎樣才能使它成爲0
?如何在bash測試命令中分配一個變量?
ok="1"
test -f no_such_file || (ok='0' && echo ggg)
> ggg
echo $ok
> 1
爲什麼$ok
仍然1
?在這種情況下,我怎樣才能使它成爲0
?如何在bash測試命令中分配一個變量?
外嘗試寫這樣說:
test -f no_such_file || { ok='0'; echo ggg; }
的{}會給你分組,但不會啓動一個子shell。在這種情況下,& &沒有用,所以我用';'替換了它。
原因是(ok='0' && echo ggg)
在子外殼中運行,因爲它包含在()
s中。如果沒有括號運行:
ok="1"
test -f no_such_file || ok='0' && echo ggg
> ggg
echo $ok
> 0
你將不得不調整自己的邏輯離開賦值語句()
小號
謝謝亞歷克斯,但你的回答產生了一個不正確的結果 - 無論no_such_file是否存在,echo ggg都會被執行 –