【问题标题】:What do these characters inside the parentheses of a paremeter expansion (${(…)}) do?参数扩展 (${(...)}) 括号内的这些字符有什么作用?
【发布时间】:2022-07-12 14:01:46
【问题描述】:

您好,我是 zsh 的新手,正在尝试创建多行提示符,遇到了这行代码:

    local pad=${(pl.$pad_len.. .)}

我的第一个问题是括号内的pl 是什么?它是命令、操作符还是标志?

我的第二个问题是$pad_len 后面的点是什么?

【问题讨论】:

    标签: zsh


    【解决方案1】:

    那些是Zsh parameter expansion flags

    • l.$pad_len. 使给定的(在本例中为空)字符串精确地变成了 $pad_len,方法是从左侧截断它或在左侧用空格填充它。
    • l.$pad_len.. . 与上述相同,但明确指定使用空格字符进行填充,这是不必要的,因为默认是用空格填充。
    • 这里的.s 是任意分隔符,用于将每个参数包含在前面的标志中。使用哪个(匹配的)标点符号并不重要,只要它们成对地包含每个参数即可。所以,l:$pad_len:: :l<$pad_len>< > 做同样的事情。
    • p 使 l 在第二个参数中支持 print escape codes,这是不必要的,因为我们不在那里使用任何参数。

    所以,写这个的更短的方法是

    local pad=${(l.$pad_len.)}
    

    如果要对非空字符串执行此操作,可以传递变量名:

    local foo=bar
    local pad=${(l.$pad_len.)foo}
    

    或者使用:-传递一个文字字符串:

    local pad=${(l.$pad_len.):-bar}
    

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多