我不知道是否有人可以解释为什么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