zsh 中 :t 的含义

zsh 中 :t 的含义

这可能在 zsh 手册中,很抱歉我偷懒并在这里询问。 zsh 中的 :t 似乎有一些特别之处,如以下示例所示。

% x=foo
% echo $x:bar
foo:bar
% echo $x:toad
foooad

的行为$x:bar是预期的行为,但:t似乎退格了。有人可以引导我到手册中讨论此问题的相应部分吗?谢谢!

答案1

:t是一个修饰符

t [ digits ]
删除所有前导路径名组件,留下最后一个组件(尾部)。这就像“ basename”一样。首先删除所有尾部斜杠。十进制数字的处理方式与上述 (h) 相同,但在这种情况下,保留尾随分量的数量,而不是默认的 1; 0 的处理方式与 1 相同。

% x=/foo/bar/baz
% echo $x:toad 
bazoad
% echo $x:t
baz
% echo ${x:t2}
bar/baz

( :t,来自 csh 从 1990 年开始就存在,而:t2变体是2019年添加首次在版本 5.8 中提供)。

答案2

这是一个修饰符——variable:modifier允许在变量扩展时对其进行修改。对于您的情况,为了使其更加明显:

echo ${x:t}bar

删除 中的所有前导路径名组件x。 (尝试设置x=/usr/bin/foo!)

老实说,我尝试训练自己绝不在字符串中使用“raw” $variable——出现并发症的风险太高(x=foo; xy=barecho $xyz……);这样做可以echo ${x}:toad消除您的 shell 比您想要的更智能的任何风险。

相关内容