ローカル変数として宣言すると、関数は中断され、「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端末で素早く開くためのシェル関数を作成しました。ただし、vardi_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オプションを設定した可能性があります)。

おすすめ記事