首页 > 解决方案 > 替换修饰符中的参数扩展

问题描述

x一个参数初始化如下:

x=("drink/beer" "drink/whine" "drink/boooze")

假设还有参数yz,分别与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}”,这当然是找不到的。是否有另一种方法可以在不使用显式循环的情况下实现我的目标?

标签: parameterszshsubstitution

解决方案


参数扩展有自己的替换语法,与历史修改运算符分开。

% print ${x/$y/$z}
buy/beer buy/whine buy/boooze

推荐阅读