如何将版本号作为变量传递给 rpmbuilder?

How can I pass version number as a variable into rpmbuilder?

构建 RPM 是我们 CI 流程的一部分,因此我自然希望将版本号作为参数传递给 rpmbuild,但我无法让它工作。我尝试了 this question 的解决方案,但它说我不能在定义字符串中放入“$”:

[mangolorax@localhost build_artifacts]$ ./package_release.sh 1.3.3.7
+ BUILD_VERSION_STRING=1.3.3.7
+ BUILD_DIR=/home/builder/build
+ exec rpmdev-setuptree
+ cd /home/mangolorax/rpmbuild/SPECS/
+ ln -sf /home/builder/build/mvpn.spec
+ rpmbuild --target x86_64 --define 'version ${BUILD_VERSION_STRING}' -bb mvpn.spec -vv
Building target platforms: x86_64
Building for target x86_64
error: line 2: Illegal char '$' in: Version: ${BUILD_VERSION_STRING}

我也找到了 ,但在我看来,这是一个荒谬而复杂的问题解决方案。当然必须有更简单的方法来做到这一点?还是我从根本上误解了这个问题?

整个问题是我在 --define 字符串周围使用了单引号。在 bash 中,这意味着字符串中的所有内容都按字面意思传递,而不扩展任何变量。如果我改为这样调用 rpmbuild,它会按预期工作:

rpmbuild --target x86_64 --define "version ${BUILD_VERSION_STRING}" -bb mvpn.spec -vv