使用 glob 替换变量

using glob to substitute a variable

阅读 bash

中的 globs 的一些文档后

https://mywiki.wooledge.org/glob#extglob

我正在努力替换变量的一部分:

这只是我用来学习更多知识的示例

myvar="value1=aaa value2=bbb value3=ccc value4=ddd"

value2="zzz"

myvar="${myvar//value2=*([a-z0-9-])/value2=${value2}}"

结果:

echo $myvar
value1=aaa value2=zzz

预期结果:

echo $myvar
value1=aaa value2=zzz value3=ccc value4=ddd

上面代码的结果不是预期的,因为它删除了 myvar 中 value2=bbb 后面的所有内容。

如果我使用:

shopt -s extglob

它在虚拟机上运行 linux,但在我当前的机器上运行,即使脚本的开头以 #!/bin/bash 开头也是如此。很可能是因为我没有在终端中使用 bash。

还有其他方法可以实现吗? (例如使用 sed 而不启用 extglob)

感谢

如果你真的不能使用Bash,那么你也许可以用最小公分母shell功能做你想做的事,像这样:

pre=${myvar%%value2=*}
post=${myvar#"$pre"value2=}
v2=${post%%[!a-z0-9-]*}
post=${post#"$v2"}
myvar="${pre}value2=${value2}${post}"