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
端末で素早く開くためのシェル関数を作成しました。ただし、vardi_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
オプションを設定した可能性があります)。