【问题标题】:Parameter expansion in substitution modifier替换修饰符中的参数扩展
【发布时间】:2020-01-10 02:23:15
【问题描述】:

x为参数,初始化如下:

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

假设还有参数yz,分别是y="drink"z="buy"。 对于x 中的每个单词,我想用z 替换掉y 的部分。因此,预期输出是

buy/beer buy/whine buy/boooze

我虽然下面的代码会这样做:

print ${x:s/${y}/${z}}

但是,它不起作用。 “drink”子字符串没有被替换,我可以在modifier documentation 中找到原因:

s/l/r/ 替换的工作原理如下 [...] 当在历史记录中使用时 展开,发生在任何其他展开之前,l 和 r 是 视为文字字符串

这意味着,在我的尝试中,zsh 从字面上搜索“${y}”,这当然是找不到的。是否有另一种方法可以在不使用显式循环的情况下实现我的目标?

【问题讨论】:

    标签: parameters zsh substitution


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2013-03-05
      相关资源
      最近更新 更多