linux bash Scirpt中的变量替换

ac1kyiln  于 2023-08-03  发布在  Linux
关注(0)|答案(3)|浏览(133)

我有一个脚本,它运行了我本地目录中的所有文件,并在我的terraform文件中找到关键字。我面临的问题是我无法替换文件中定义的变量。当I reference value被替换时,它会捕获$variable作为引用。举例来说:

Repository_Name="test"

grep -rl '#{RepositoryName}#' --include *.tf |
  xargs gsed -i 's/#{RepositoryName}#/${Repository_Name}/g'

字符串
我也试过像下面的例子一样删除变量外的{},但仍然没有成功:

Repository_Name="test"

grep -rl '#{RepositoryName}#' --include *.tf |
  xargs gsed -i 's/#{RepositoryName}#/$Repository_Name/g'


我通常得到的结果是:

RepositoryName = "$Repository_Name"


或者是

RepositoryName = "${Repository_Name}"

vnzz0bqm

vnzz0bqm1#

您需要"来计算变量

Repository_Name="test"

grep -rl '#{RepositoryName}#' --include *.tf | xargs gsed -i "s/#{RepositoryName}#/${Repository_Name}/g"

字符串
如果您希望在文件中包含{,可能还需要额外的{

4si2a6ki

4si2a6ki2#

其实sed就够了:

sed -i '/#{RepositoryName}#/'"s||$Repository_Name|g" *.tf

字符串

jutyujz0

jutyujz03#

解决这个问题的办法

grep -rl '#{RepositoryName}#' --include *.tf |
  xargs gsed -i "s@#{RepositoryName}#@${Repository_Name}@g"

字符串
sed有焦痂并发症。
for reference

相关问题