Variable
聲明為本地 var 將破壞函式並註銷“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
我編寫了一個 shell 函式來在終端中快速打開。但是當我聲明di_files
為local
var時,函式就壞了,並且logprojectopen: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
設置了一個相關選項)。