지역변수로 선언하면 함수가 중단되고 "1:예상숫자"가 로그아웃됩니다.

지역변수로 선언하면 함수가 중단되고 "1:예상숫자"가 로그아웃됩니다.
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이를 구분해야 했습니다.localtypesetdeclare

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관련 옵션을 설정했을 수 있습니다).

관련 정보