在zsh下,字符串中带';r&#;的冒号不能正常工作 [英] Colon with 'r' in string not working as desired under zsh
本文介绍了在zsh下,字符串中带';r&#;的冒号不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试在zsh
a=123
b="$a:r"
echo $b
我希望结果是123:r
,但结果是
123 # without ":r"
字符t
、q
也是如此。
但是,如果我在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屋!
查看全文