空字符串是文件吗? (如果[!-f“”])

空字符串是文件吗? (如果[!-f“”])

该脚本称为isFile.sh看起来像这样:

#!/bin/sh

回声 $1
回声 $2

如果 [ ! -f $1 ];然后
  echo "$1 (arg1) 不是文件"

如果 [ ! -f $2 ];然后
  echo "$2 (arg2) 不是文件"

首先,我通过执行创建了一个文件touch file.exist

我运行的bash isFile.sh file.exist file.notexist 输出是:

文件.存在

文件.note存在

file.notexist (arg2) 不是文件


然后我运行bash isFile.sh "" file.notexist 输出是:

(#空行)

文件.note存在

file.notexist (arg2) 不是文件

预期输出为:

(#空行)

文件.note存在

(arg1) 不是文件

file.notexist (arg2) 不是文件

有人可以解释为什么吗?

答案1

问题是扩展后[ ! -f $1 ]会出现问题[ ! -f ](而不是[ ! -f "" ]像您想象的那样!),因此如果检查给定文件是否存在,[请检查-f字符串是否为空。它不为空,但由于!最终退出代码为1,因此该echo命令未执行。

这就是为什么您需要在 POSIX shell 中引用变量。

相关问题:

相关内容