parameters - 替换修饰符中的参数扩展
问题描述
让x
一个参数初始化如下:
x=("drink/beer" "drink/whine" "drink/boooze")
假设还有参数y
和z
,分别与y="drink"
amd z="buy"
。对于 中的每个单词x
,我想用 machtes 替换掉 machtes 的y
部分z
。因此,预期输出为
buy/beer buy/whine buy/boooze
我虽然下面的代码会这样做:
print ${x:s/${y}/${z}}
但是,它不起作用。“drink”子字符串没有被替换,我可以在修饰符文档中找到原因:
s/l/r/ 替换的工作方式如下 [...] 当在历史扩展中使用时,它发生在任何其他扩展之前,l 和 r 被视为文字字符串
这意味着,在我的尝试中,zsh 从字面上搜索“${y}”,这当然是找不到的。是否有另一种方法可以在不使用显式循环的情况下实现我的目标?
解决方案
参数扩展有自己的替换语法,与历史修改运算符分开。
% print ${x/$y/$z}
buy/beer buy/whine buy/boooze
推荐阅读
- javascript - OnError 未显示默认图像
- android - RxJava如何测试去抖动?
- odoo - odoo 允许现有用户使用谷歌登录进行注册
- python - 如何在 Python 中增量打印字符串中的字符
- css - Angular 材质和自定义主题
- python - 输出顺序随运行而变化
- spring-boot - 入口控制器不是基于 openshift 中的路径进行路由
- java - NoSuchMethodError:io.swagger.jaxrs.config.BeanConfig.setUsePathBasedConfig(Z)V
- excel - 更改形状中的字体颜色
- mysql - MySql - 如何获取最后一个 ALTER TABLE 的日期时间?