小编use*_*428的帖子

尽管设置了 EXTENDED_GLOB,但 zsh glob 模式仍无法匹配除一个之外的所有文件

我有一个包含几个文件的目录:

$ ls tdir
xx  yy zz
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个zshglob 模式,它扩展到所有(非点)文件,除了xx. 这是我尝试过的:

$ set -o EXTENDED_GLOB
$ echo tdir/*~xx
tdir/xx tdir/yy tdir/zz
Run Code Online (Sandbox Code Playgroud)

正如我们所见,这是行不通的;*~xx没有按我预期的方式扩展。我如何正确地写这个?

zsh wildcards

2
推荐指数
1
解决办法
1648
查看次数

将路径拆分为文件名

在我的 zsh 脚本中,我想知道我的工作目录是否以开头/cygdrive/?/...或完全匹配/cygdrive/?(驱动器号 (?) 可以是与字母 c 不同的任何字母),如果是,则检索到两个变量中/cygdrive/?部分和剩余的/...。示例:如果我的工作目录是/cygdrive/r/abc/xyz,我希望将变量head设置为/cygdrive/r并将变量tail设置为/abc/xyz。如果 PWD 只是,比如说,,/cygdrive/r变量tail应该是空的。

我更喜欢只使用 zsh 内部命令的解决方案,即不需要生成进程。

我想出了以下解决方案,它可以完成这项工作,但我不喜欢它:

if [[ $PWD == /cygdrive/[abd-z]* ]]
then
  local head=${PWD:0:11}
  local tail=${PWD#/cygdrive/?}
  ....
fi
Run Code Online (Sandbox Code Playgroud)

特别是,我不喜欢 head 的计算,硬编码值为 11,我想知道是否可能有一种完全不同的方法,这会更优雅。

更新:我知道我的if条件也成立,例如,如果 PWD 是/cygdrive/foo,但对于我的应用程序,我不认为这是一个问题。当然,如果您可以提出更好的替代方案来编写条件,这正是我想要的,我感谢任何评论。

zsh

1
推荐指数
1
解决办法
172
查看次数

标签 统计

zsh ×2

wildcards ×1