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
}
xcworkspace
터미널에서 빠르게 열 수 있도록 쉘 함수를 작성했습니다 . 하지만 var di_files
로 선언하면 local
함수가 파괴되고 로그가 기록됩니다.
projectopen:1: 예상 수량
저는 Mac OS에서 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
관련 옵션을 설정했을 수 있습니다).