我不知道是否有人可以解釋爲什麼while循環將多個測試條件視爲不同的if循環。我有2次測試,我驗證出來的真和假:Bash while循環表現不同,處理多個測試條件
Bash$ test ! -n "$(find . -maxdepth 1 -name '*.xml' -print -quit)"; echo $?
0
Bash$ test ! -e "unsentData.tmp"; echo $?
1
Bash$
當我與運算這兩個測試到if語句我有虛假的總預期:
Bash$ if [ ! -n "$(find . -maxdepth 1 -name '*.xml' -print -quit)" ] && [ ! -e "unsentData.tmp" ]; then echo "True"; else echo "False"; fi
False
Bash$
現在,當我把2個測試放到一個while循環中,我期待一個睡眠,直到滿足兩個條件,但是我立即得到了一個真正的結果。
Bash$ while [ ! -n "$(find . -maxdepth 1 -name '*.xml' -print -quit)" ] && [ ! -e "unsentData.tmp" ]; do sleep 1; done; echo -e "All files Exist\n$(ls /opt/pcf/mfe/unsentXmlToTSM/xmlConnection0_TSM/)"
All files Exist
unsentData.tmp
Bash$
我在這裏錯過了什麼?我只想寫一些東西,等到兩個條件都滿足時,跳出循環
的前
直到循環工作,當我刪除否定。這是我正在尋找但忽略的方向。謝謝。我想等到xml文件和unsentData.tmp都存在,所以沒有否定的否定ANDed測試條件中的任何一個都起作用 – amadain 2012-02-17 08:14:59