macOS標準のbash 3は連想配列が使えない
macOSに標準搭載されている bash は 3.x 系で、declare -A (連想配列)が使えない。bash 4以降の機能。
# bash 4+: 動く
declare -A counts
counts["key"]="value"
# bash 3 (macOS default): syntax error
Homebrew で bash 5 を入れていれば使えるが、CI環境やチームメンバーの環境では入っていない前提で書くほうが安全。
回避策:
- 連想配列の代わりに
grep+ 一時ファイルやawkでキーバリューを管理する /bin/bashではなく/usr/bin/env bashを使い、PATH上の新しい bash を使う手もあるが、全環境に bash 4+ がある保証はない- 複雑なデータ構造が必要ならシェルスクリプトをやめて Python や jq に切り替える
ポイント:
#!/bin/bashで書くスクリプトはmacOSのbash 3互換を意識するdeclare -A以外にも、${var,,}(小文字変換)、|&(パイプのstderrリダイレクト)なども bash 4+ 限定