多亏了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”?
答案 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**' ']'
,从而使该条件始终为真。
**
应该被删除,它们看起来像是一个错误。