Bash 测试命令检查文件是否存在无法按预期工作

Bash 测试命令检查文件是否存在无法按预期工作

我有一个简单的 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。这个变量将始终为空,因为 $(...) 捕获的是程序的输出,而不是结果。

相关内容