我有一些奇怪的行为
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
时缓存了命令的输出。如果你可以指出我正确的方向,一些链接/文档将是更大的。感谢