![Bash 测试命令检查文件是否存在无法按预期工作](https://linux22.com/image/1194342/Bash%20%E6%B5%8B%E8%AF%95%E5%91%BD%E4%BB%A4%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我有一个简单的 bash 脚本。我需要检查文件是否存在,然后执行一些与检查结果相关的操作。脚本如下所示:
#!/bin/bash
productionPackageJsonPath=/var/www/portaldev/current/package.jsonxxx
productionNodeModulesPath=/var/www/portaldev/current/node_modules
hasPackageJsonFile=$(test -f productionPackageJsonPath)
hasDiff=""
if [ "$hasPackageJsonFile" == "true" ]
then
echo "aaaaaaaaaaaaaaaaaaaa"
hasDiff=$(diff ${productionPackageJsonPath} package.json)
else
echo "bbbbbbbbbbbbbbbbbbb"
fi
这应该返回 false,因为 package.jsonxxx 不存在。但我总是得到 true 或者我不知道是什么。但控制台总是显示 echo "aaaaaaaaaaaaaaaaaaaa"
有人能告诉我我做错了什么吗?谢谢。
答案1
所以我的解决方案是:
productionPackageJsonPath=/var/www/portaldev/current/package.json
if [ -f $productionPackageJsonPath ]
then
echo "aaaaaaaaaaaaaaaaaaaa"
hasDiff=$(diff ${productionPackageJsonPath} package.json)
else
echo "bbbbbbbbbbbbbbbbbbb"
hasDiff=""
fi
答案2
hasPackageJsonFile=$(test -f productionPackageJsonPath)
现在命令的输出test -f productionPackageJsonPath
被赋值给hasPackageJsonFile
。这个变量将始终为空,因为 $(...) 捕获的是程序的输出,而不是结果。