if 命令语法

Pra*_*chi 3 command-line bash syntax

我的shell脚本代码如下:

echo "Enter file name";
read fname;
if [-f$fname];
then
    echo "File already exists";
fi`
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,出现此错误:

[-ffile]: not found
Run Code Online (Sandbox Code Playgroud)

我试过间距,-f $fname但我仍然遇到同样的错误。为什么会发生这种情况,我该如何解决?

fed*_*qui 8

您可能添加了一个包含空格的值。为了防止这种情况,请始终引用您的变量:

if [ -f "$fname" ]
Run Code Online (Sandbox Code Playgroud)

另外,还要注意[]周围需要的空间。为什么?因为[是命令,所以必须与前面的语句用空格隔开。您可以通过键入 阅读有关它的信息man test

全部一起:

echo "Enter file name";
read -r fname;
if [ -f "$fname" ]; then
   echo "File already exists";
fi
Run Code Online (Sandbox Code Playgroud)

查看有关引号如何重要的测试:

$ touch "a b"
$ filename="a b"
$ [ -f $filename ] && echo "exists!"
bash: [: a: binary operator expected
$ [ -f "$filename" ] && echo "exists!"
exists!
Run Code Online (Sandbox Code Playgroud)