这个bash脚本中的两颗星在做什么?只是在否定?

时间:2019-02-05 16:54:45

标签: bash

多亏了this reference,我才能够获得带有通配符文件匹配功能的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”?

2 个答案:

答案 0 :(得分:3)

星号不应存在。看来作者的意思是加粗INotification,但不小心插入了文字星号。该行应简单地写为:

var instance = handler as INotification<TNotification>;

(如果您与它们一起运行脚本,它们将被解释为glob。如果当前目录中有一个以"$files" != "0"开头的文件,例如if [ "$files" != "0" ] 0,则{{1 }}是一个通配符模式,将匹配这些文件名[0.txt在这里等效于0123-foobar]。另一方面,如果不存在这样的文件,它将成为文字字符串{{1} },相当于"0"**

无论哪种情况,最有可能的结果是两个字符串总是比较不相等。

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

答案 1 :(得分:1)

使用set -x运行表明此条件被评估为'[' '**0' '!=' '0**' ']',从而使该条件始终为真。

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