Bash文件存在检查缺失]

sig*_*eta 5 linux 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
Run Code Online (Sandbox Code Playgroud)

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

/path/to/script: line 9: [: missing `]'
Run Code Online (Sandbox Code Playgroud)

我不是一个bash专家,但我很确定在这种情况下不需要反击.是什么赋予了?

SzG*_*SzG 7

在结束前缺少空间].

你必须明白这[是一个命令及其后面的一切,直到它;是它的论点.Command [期望它的最后一个参数].但是如果省略空格,则]成为前一个参数的最后一个字符.

它似乎[ ]if语法的一部分.事实并非如此.if必须跟随任何命令,并if评估其退出状态.

if true; then foo; fi
Run Code Online (Sandbox Code Playgroud)

在上面的行true也是一个命令.

$ which true
/bin/true
Run Code Online (Sandbox Code Playgroud)

true 是一个命令,其唯一目的是始终具有真(0)退出状态.