function projectopen {
local di_files=(*.xcworkspace */*.xcworkspace *.xcodeproj */*.xcodeproj)
# open first exsit file
ls -d -f -1 $di_files 2>/dev/null \
| head -1 \
| xargs open
}
我编写了一个 shell 函数来xcworkspace
在终端中快速打开。但是当我声明di_files
为local
var 时,函数就被破坏了,并且记录
projectopen:1:预期数量
我在 Mac 操作系统上使用 zsh。为什么会发生这种情况以及如何解决?
答案1
在旧版本中,您无法使用(或/ )这样zsh
初始化数组,您需要将其分开,例如local
typeset
declare
local -a di_files # explicit array
di_files=( ... )
v5.1 中添加了允许同时声明和数组赋值的功能。
我相信您看到的错误是因为zsh
将初始化视为标量和()
全局限定符。
您也可以用更简单的管道替换复杂的管道
open "${di_files[1]}"
最后,包括对没有匹配文件的处理:
function projectopen {
setopt local_options nullglob
local di_files=(*.xcworkspace */*.xcworkspace *.xcodeproj */*.xcodeproj)
# open first existing file
[ -n "${di_files[1]}" ] && open "${di_files[1]}"
}
使用该nullglob
选项,每个不匹配文件的全局扩展都会被替换为空字符串(我怀疑您可能已经nonomatch
设置了相关选项)。