我正在尝试用 shell 脚本中的另一个变量替换一个变量。但它显示为空字符串。下面是场景。
- 将“x”分配给包含变量“abc”的字符串
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
- 下面是脚本abc.sh的内容,定义了abc->的值
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
- 执行命令“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 重新评估该语句,将正确的字符串分配给变量。