在zsh下,字符串中带'r&#;的冒号不能正常工作 [英] Colon with 'r' in string not working as desired under zsh

查看:10
本文介绍了在zsh下,字符串中带'r&#;的冒号不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在zsh

下运行代码
a=123
b="$a:r"
echo $b

我希望结果是123:r,但结果是

123 # without ":r"

字符tq也是如此。

但是,如果我在bash下运行它,它会给我带来所需的结果123:r

如果我添加{},则运行

a=123
b="${a}:r"
echo $b

这也会带来所需的结果。

有人知道这里发生了什么吗?

推荐答案

在zsh中,"$a:r"默认与"${a:r}"相同。

引用the documentation(已添加强调):

${name}

参数名称的值(如果有)将被替换。如果扩展后面的字母、数字或下划线不会被解释为名称的一部分,则需要大括号。此外,更复杂的替换形式通常需要大括号;例外情况(仅在未设置选项KSH_ARRAYS的情况下适用)是单个下标或出现在名称后面的任何冒号修饰符,或者出现在名称之前的任何字符‘^’、‘=’、‘~’、‘#’或‘+’,所有这些字符都可以使用或不使用大括号。

:r修饰符means

删除保留根名称的文件扩展名。不带文件扩展名的字符串不会更改。文件扩展名为‘.’后面跟任意数量的字符(包括零),这些字符都不是‘.’Nor‘/’,并继续到字符串的末尾。例如,‘foo.Orig.c’的扩展名为‘.c’,而‘dir.c/foo’没有扩展名。

要禁用此行为,请执行以下操作:

$ setopt KSH_ARRAYS
(注意:在我的设置上执行此操作实际上会导致zsh分段错误;该选项以多种方式更改行为,其中一种方式与我的.zshrc中的某些内容严重冲突。您的结果可能有所不同。)

这篇关于在zsh下,字符串中带'r&#;的冒号不能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆