该脚本称为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 中引用变量。
相关问题: