Bash文件存在检查丢失]

我正在尝试一个简单的文件存在检查在我的bash脚本中:

FILE_TO_CHECK=/home/username/path/to/file if [ ! -f $FILE_TO_CHECK]; #line 9 in actual script then echo File not found. fi 

似乎对我来说很简单,但我得到以下错误,我不知道为什么:

 /path/to/script: line 9: [: missing `]' 

我不完全是一个bash的专家,但我很确定,在这种情况下反托拉斯没有必要。 是什么赋予了?

在结束之前缺少空间]

你必须明白, [是一个命令和它后面的一切,直到; ,是它的论据。 命令[期望它的最后一个参数是] 。 但是,如果你省略了空格,那么就成为前一个参数的最后一个字符。

看起来[ ]if语法的一部分。 事实并非如此。 if必须跟随任何命令,并且评估其退出状态。

 if true; then foo; fi 

在上面的行中, true一个命令。

 $ which true /bin/true 

你也可以尝试:

 if (test ! -f $FILE_TO_CHECK); 

要么

 if !(test -f $FILE_TO_CHECK); 

因为[test命令的缩写。