Nas versões mais antigas de zsh
, não é possível inicializar uma matriz com local
(ou typeset
/ declare
) dessa forma, você precisa separá-la, por exemplo
local -a di_files # explicit array
di_files=( ... )
O recurso para permitir declaração e atribuição de matriz juntos foi adicionado na v5.1.
Acredito que o erro que você vê é porque zsh
está tratando a inicialização como escalar e ()
como um qualificador glob.
Você provavelmente também pode substituir seu pipeline elaborado pelo mais simples
open "${di_files[1]}"
Finalmente, incluindo o tratamento de arquivos não correspondentes:
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]}"
}
Com a opção nullglob
, cada expansão glob que não corresponde a nenhum arquivo é substituída por uma string vazia (suspeito que você tenha nonomatch
set, uma opção relacionada).