使用双变量 $ 的 BASH - 错误的替换



根据我下面的代码,如何在变量"yy"上用x替换"critical_"后使"zz"的值变为500

xab123=500
yy="critical_ab123"
zz=${"${yy//critical_/x}"}
echo $zz

相反,结果是一个错误:

line 8: ${"${yy//critical_/x}"}: bad substitution

谢谢adi

可能是

这样的:

xab123=500
yy="critical_ab123"
zz="${yy//critical_/x}"
echo ${!zz}
500

一个有趣的用法是,当你调用 bash 函数时,你可以对传入的参数使用间接寻址。然后,可以使用命令替换以嵌套方式嵌套对间接寻址函数的调用。

deref() { echo "${!1}"; }
aa="bb"
bb="cc"
cc="hello"
echo "$(deref aa)" # bb
echo "$(deref "$(deref aa)")" # cc
echo "$(deref "$(deref "$(deref aa)")")" # hello

以下是用于解决 OP 问题的deref

deref() { echo "${!1}"; }
xab123="500"
yy="critical_ab123"
zz="$(deref "${yy//critical_/x}")"
echo "$zz" # Outputs: 500

根据@charles达菲评论应用编辑:

  1. 免责声明:读者请注意,此方法中使用的命令替换(FIFO 创建、子壳的 fork()、read() 和 wait())对性能有影响。
  2. 添加了引号以防止有损扩展,即 echo "$zz"echo $zz
  3. 使用符合 POSIX 的函数声明语法,即将function deref { echo "${!1}" ; }替换为 deref() { echo "${!1}" ; }
  4. 更正了每个引用上下文的引用问题

相关内容

  • 没有找到相关文章

最新更新