使用 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}"
阅读 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}"