用变量替换包含美元符号的bash脚本中的字符串

时间:2020-06-22 20:43:56

标签: regex bash sed

我有一个bash脚本,该脚本读取包含字符串的文件,并且我想在执行命令之前进行一些变量替换。 bash本身所做的几乎是什么。用户将向脚本提供替换参数数组。 这似乎很简单,但我无法从文件中读取的字符串中替换$。假设正在从文件中读取STR,并且已将ARGS输入到脚本中:

#!/bin/bash
ARGS=(what string)
STR='This is ${1} my input ${2} string looks like. ${1}?'

v=1
for s in "${ARGS[@]}"
do
   #STR=`echo $STR | sed "s/'$'{$v}/$s/g"` #using this replaces nothing in STR
   STR=`echo $STR | sed "s/{$v}/$s/g"   #using this replaces the {number} correctly but leaves the $
   v=$((v+1))
done
echo $STR
# eval $STR

运行以上命令,给出:这是$我的输入$ string字符串的样子。什么 但我希望最终的STR中不存在$。

1 个答案:

答案 0 :(得分:0)

#!/bin/bash
ARGS=(what string)
STR='This is ${1} my input ${2} string looks like. ${1}?'

v=1
for s in "${ARGS[@]}"
do
   STR=`echo $STR | sed "s/\\${$v}/$s/g"`
   v=$((v+1))
done
echo $STR

如果我对您的理解正确,这就是我想要的输出。

This is what my input string string looks like. what?