根据我下面的代码,如何在变量"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达菲评论应用编辑:
- 免责声明:读者请注意,此方法中使用的命令替换(FIFO 创建、子壳的 fork()、read() 和 wait())对性能有影响。
- 添加了引号以防止有损扩展,即
echo "$zz"
比echo $zz
好 - 使用符合 POSIX 的函数声明语法,即将
function deref { echo "${!1}" ; }
替换为deref() { echo "${!1}" ; }
- 更正了每个引用上下文的引用问题