![如何在 Bash 中的变量中使用变量?](https://linux22.com/image/1566979/%E5%A6%82%E4%BD%95%E5%9C%A8%20Bash%20%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我有两个变量 -
regex="<version>[0-9]*\.[0-9]*\.[0-9]*[^<]*<\/version>"
updated_regex="<version>${main_version}\.${feature_version}\.${patch_version}${tag}<\/version>"
我想在以下命令中使用 -
sed "s/$regex/$updated_regex/1" pom.xml
但它不起作用,因为正则表达式和变量没有在我的命令中被评估或替换。
答案1
正如我在评论中所说的那样,当你运行该行时
updated_regex="<version>${main_version}\.${feature_version}\.${patch_version}${tag}<\/version>"
该变量updated_regex
将被分配该字符串,其中所有这些变量将在运行此行时扩展。
当你运行该sed
行时,将使用此字符串,但顶行内的变量不会再次扩展。因此解决方案是使用以下内容:
regex="<version>[0-9]*\.[0-9]*\.[0-9]*[^<]*<\/version>"
sed "s/$regex/<version>${main_version}\.${feature_version}\.${patch_version}${tag}<\/version>/1" pom.xml