从Zsh

问题描述 投票:0回答:2

如何从ZSH中的字符串末端删除任何和所有空格,而不会产生另一个过程?

查看

在zsh中进行扩展的文档(即节14.3参数扩展14.8.1glob operators) - 也可以通过

$ man zshexpn
来查看 - 我写了以下代码:

${${var##[:space:]##}%%[:space:]##}

但ZSH似乎并没有识别
[:space:]球操作员。根据我对文档中以下陈述的理解,它是

在下面讨论的需要模式的扩展中,模式的形式与文件名生成的形式相同;请参阅文件名的生成。请注意,这些模式以及任何替换的替代文本本身都需要参数扩展,命令替代和算术扩展。

这是ZSH中的一个错误,还是我忽略了什么?

现在,我只是在使用the comply tody至少在末尾替换所有空间字符。 我使用zsh5.8.

	
您真的很接近

您需要修改您的

posix基本正则表达式

字符类语法abit
string zsh whitespace glob parameter-expansion
2个回答
6
投票
您可以使用

${${var## ##}%% ##}

(匹配的子字符串)
    参数扩展标志
  1. .
  2. (MS)
  3. solution
    在下面的示例中,我们将从具有标识符${(MS)var##[[:graph:]]*[[:graph:]]}
  4. 的参数剥离带领/尾随的空格。在您自己的代码中根据需要替换这一点。
var

打印出任何领先/尾随的参数:

typeset var=$'\n\t   abc   def   \n\t'

输出

print -n -- ${(MS)var##[[:graph:]]*[[:graph:]]}

引用the the the Glob Operator文档:

注意,方括号是封闭整个字符的那些方括号,因此要测试一个单个字母数字,您需要

abc def


2
投票
zsh

而不是

[[:alnum:]]
是您的问题。

贝斯:

有几种方法可以说“匹配上一件事的多个副本”。您使用的一个需要打开
[:space:]

选项,是使用
[[:space:]]

zsh
,它匹配模式的一个或多个出现x
(也有
EXTENDED_GLOB

图案x
)。另一个需要工作的选项是

x##

x#

(后者需要启用
KSH_GLOB
选项),因此,来自另一个外壳的人可能更熟悉。
SO:
+(x)
像您想要的那样,删除所有领先和尾随的空格角色。
也要注意,这种扩展的嵌套是特定的。它在其他外壳中无法使用,这两个删除将需要多个步骤。
    

ok,我一直在寻找如何做到这一点,而ZSH的语法只是丑陋(尽管确实有效)。然后我发生在我身上:炮弹在调用函数时删除了前导和落后空间:
x
无法遵循ZSH语法,这使其死亡显而易见。
    
*(x)
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.