【问题标题】:Replace string in bash script that contains dollar sign with a variable用变量替换包含美元符号的bash脚本中的字符串
【发布时间】:2020-10-12 19:58:12
【问题描述】:

我有一个 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 中。

【问题讨论】:

  • 是 bash 脚本中的字符串或如何在 bash 脚本中将字符串中的 $ 替换为变量?
  • 不完全理解;查看来自文件的某些输入或您对 cli 的期望可能会有所帮助。

标签: regex bash sed


【解决方案1】:
#!/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?

【讨论】:

  • 这正是我所需要的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2011-01-22
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多