Variable

聲明為本地 var 將破壞函式並註銷“1:預期數字”

  • November 25, 2016
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我編寫了一個 shell 函式來在終端中快速打開。但是當我聲明di_fileslocalvar時,函式就壞了,並且log

projectopen:1:預期數量

我在 Mac OS 上使用 zsh。為什麼會發生這種情況以及如何解決?

在舊版本中,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選項,每個不匹配文件的 glob 擴展都將替換為一個空字元串(我懷疑您可能已經nonomatch設置了一個相關選項)。

引用自:https://unix.stackexchange.com/questions/325945