shwldshwld10 days ago

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+ 限定