如何从ZSH中的字符串末端删除任何和所有空格,而不会产生另一个过程?
查看在zsh中进行扩展的文档(即节14.3参数扩展和14.8.1glob operators) - 也可以通过
$ man zshexpn
来查看 - 我写了以下代码::${${var##[:space:]##}%%[:space:]##}
但ZSH似乎并没有识别
[:space:]
球操作员。根据我对文档中以下陈述的理解,它是::在下面讨论的需要模式的扩展中,模式的形式与文件名生成的形式相同;请参阅文件名的生成。请注意,这些模式以及任何替换的替代文本本身都需要参数扩展,命令替代和算术扩展。
这是ZSH中的一个错误,还是我忽略了什么?
现在,我只是在使用the comply tody至少在末尾替换所有空间字符。 我使用zsh5.8.
您真的很接近 您需要修改您的
posix基本正则表达式
字符类语法abit${${var## ##}%% ##}
(MS)
solution在下面的示例中,我们将从具有标识符
${(MS)var##[[:graph:]]*[[:graph:]]}
var
typeset var=$'\n\t abc def \n\t'
输出:
print -n -- ${(MS)var##[[:graph:]]*[[:graph:]]}
注意,方括号是封闭整个字符的那些方括号,因此要测试一个单个字母数字,您需要
abc def
。
zsh
而不是
‘[[:alnum:]]’
是您的问题。
贝斯:
有几种方法可以说“匹配上一件事的多个副本”。您使用的一个需要打开[:space:]
选项,是使用
[[:space:]]
zsh
,它匹配模式的一个或多个出现x(也有
EXTENDED_GLOB
图案xx##
x#
(后者需要启用
KSH_GLOB
选项),因此,来自另一个外壳的人可能更熟悉。SO:
+(x)
像您想要的那样,删除所有领先和尾随的空格角色。
也要注意,这种扩展的嵌套是特定的。它在其他外壳中无法使用,这两个删除将需要多个步骤。
ok,我一直在寻找如何做到这一点,而ZSH的语法只是丑陋(尽管确实有效)。然后我发生在我身上:炮弹在调用函数时删除了前导和落后空间:
x
无法遵循ZSH语法,这使其死亡显而易见。
*(x)