在 shell 脚本中将变量替换为另一个变量,无需重新分配

在 shell 脚本中将变量替换为另一个变量,无需重新分配

我正在尝试用 shell 脚本中的另一个变量替换一个变量。但它显示为空字符串。下面是场景。

  1. 将“x”分配给包含变量“abc”的字符串
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
  1. 下面是脚本abc.sh的内容,定义了abc->的值
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
  1. 执行命令“sh abc.sh $x”时得到低于值。

实际 -> 新值为 ${abc}

预期->新值是some='123:234'

请帮忙解决以上问题。

谢谢

答案1

当您插入 value 时new value is ${abc},该${abc}部分只是一个字符串。当您执行此操作时,不会重新评估该字符串以进行扩展xyz=$@

要扩展${abc}字符串,请在脚本中执行以下操作:

abc="something='123:234'"

eval "xyz=\"$1\""

printf '%s\n' "$xyz"

eval需要一段 shell 代码。给定的代码确实如此xyz="$1",但被$1命令行参数(字符串new value is ${abc})替换。然后 shell 重新评估该语句,将正确的字符串分配给变量。

相关内容