我有一个包含几个文件的目录:
$ ls tdir
xx yy zz
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个zsh
glob 模式,它扩展到所有(非点)文件,除了xx
. 这是我尝试过的:
$ set -o EXTENDED_GLOB
$ echo tdir/*~xx
tdir/xx tdir/yy tdir/zz
Run Code Online (Sandbox Code Playgroud)
正如我们所见,这是行不通的;*~xx
没有按我预期的方式扩展。我如何正确地写这个?
在我的 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
,但对于我的应用程序,我不认为这是一个问题。当然,如果您可以提出更好的替代方案来编写条件,这正是我想要的,我感谢任何评论。