【发布时间】:2022-07-12 14:01:46
【问题描述】:
您好,我是 zsh 的新手,正在尝试创建多行提示符,遇到了这行代码:
local pad=${(pl.$pad_len.. .)}
我的第一个问题是括号内的pl 是什么?它是命令、操作符还是标志?
我的第二个问题是$pad_len 后面的点是什么?
【问题讨论】:
标签: zsh
您好,我是 zsh 的新手,正在尝试创建多行提示符,遇到了这行代码:
local pad=${(pl.$pad_len.. .)}
我的第一个问题是括号内的pl 是什么?它是命令、操作符还是标志?
我的第二个问题是$pad_len 后面的点是什么?
【问题讨论】:
标签: zsh
那些是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}
【讨论】: