使用-z时返回缓存输出的测试命令,但在使用时不使用!=

时间:2017-10-16 10:02:21

标签: bash

我有一些奇怪的行为

rm /tmp/a
touch /tmp/a

int=1

while [ "aaaa" != "$(cat /tmp/a)" ]; do
echo "loop";

sleep 1;
int="$((int+1))"
if [ "$int" == "10" ]; then
  echo "aaaa" > /tmp/a
fi
cat /tmp/a;
done

此脚本将输出loop,然后在int为10时停止,但

rm /tmp/a
touch /tmp/a

int=1

while [ -z "$(cat /tmp/a)" ]; do
echo "loop";

sleep 1;
int="$((int+1))"
if [ "$int" == "10" ]; then
  echo "aaaa" > /tmp/a
fi
cat /tmp/a;
done

这将永远循环。 bash版本:

GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

我想知道为什么在使用-z时缓存了命令的输出。如果你可以指出我正确的方向,一些链接/文档将是更大的。感谢

0 个答案:

没有答案