2

多亏了这个参考,我才能得到一个带有通配符文件匹配的 if 语句。但是,我不明白这里的双星号到底在做什么:

files=$(ls /tmp/*.cache 2> /dev/null | wc -l)
if [ **"$files" != "0"** ]
then
echo "Cache files exist: do something with them"
else
echo "No cache files..."
fi

它只是否定了这个陈述,所以在这种情况下它是说'如果文件数不等于 0'?

4

2 回答 2

3

星号不应该在那里。看起来作者的意思是粗体"$files" != "0"但不小心插入了文字星号。该行应该简单地阅读:

if [ "$files" != "0" ]

(如果您在那里运行脚本,它们将被解释为 glob。如果当前目录中有一个文件以诸如00.txt开头的通配符模式匹配这些文件名 [这里等效于]。在另一方面,如果不存在这样的文件,那么它将成为文字字符串,相当于. 0123-foobar"0"**"0"**0*0**'0**'

在任何一种情况下,最可能的结果是两个字符串总是比较不相等。

不用说,检查变量是否0不应该根据当前目录中碰巧存在的文件而有所不同。)

于 2019-02-05T16:58:04.017 回答
1

运行set -x表明该条件被评估为'[' '**0' '!=' '0**' ']'基本上使条件始终为真。

**应该被删除,它们看起来像一个错误。

于 2019-02-05T17:02:07.573 回答