From 2cdff9d3c1442519f7e5fcf2a384d432ed81fc40 Mon Sep 17 00:00:00 2001 From: Alvin Hsieh Date: Wed, 28 Jan 2026 23:09:03 +0800 Subject: [PATCH] Fix macOS compatibility: replace Bash 4 associative array with string tracking macOS ships with Bash 3.2 which doesn't support 'declare -A' (associative arrays). Replace the 'seen' associative array with a simple delimited string 'seen_keys' to track which environment variables have been processed. The logic remains identical: - String concatenation instead of array assignment - Substring match instead of array key lookup Tested on macOS with Bash 3.2.57 and the upsert_env function works correctly. --- docker-setup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-setup.sh b/docker-setup.sh index 0f7571e96..225e5ed06 100755 --- a/docker-setup.sh +++ b/docker-setup.sh @@ -124,7 +124,7 @@ upsert_env() { local -a keys=("$@") local tmp tmp="$(mktemp)" - declare -A seen=() + local seen_keys="" if [[ -f "$file" ]]; then while IFS= read -r line || [[ -n "$line" ]]; do @@ -133,7 +133,7 @@ upsert_env() { for k in "${keys[@]}"; do if [[ "$key" == "$k" ]]; then printf '%s=%s\n' "$k" "${!k-}" >>"$tmp" - seen["$k"]=1 + seen_keys="${seen_keys}${k};" replaced=true break fi @@ -145,7 +145,7 @@ upsert_env() { fi for k in "${keys[@]}"; do - if [[ -z "${seen[$k]:-}" ]]; then + if [[ "$seen_keys" != *"${k};"* ]]; then printf '%s=%s\n' "$k" "${!k-}" >>"$tmp" fi done