如何在 Bash 中的变量中使用变量?

如何在 Bash 中的变量中使用变量?

我有两个变量 -

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 

相关内容