我正在尝试一个简单的文件存在检查在我的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
命令的缩写。