diff --git a/docker-setup.sh b/docker-setup.sh index 0f7571e96..c5698be39 100755 --- a/docker-setup.sh +++ b/docker-setup.sh @@ -124,7 +124,18 @@ upsert_env() { local -a keys=("$@") local tmp tmp="$(mktemp)" - declare -A seen=() + local -a seen_keys=() + local has_seen + has_seen() { + local candidate="$1" + local existing + for existing in "${seen_keys[@]:-}"; do + if [[ "$existing" == "$candidate" ]]; then + return 0 + fi + done + return 1 + } if [[ -f "$file" ]]; then while IFS= read -r line || [[ -n "$line" ]]; do @@ -133,7 +144,7 @@ upsert_env() { for k in "${keys[@]}"; do if [[ "$key" == "$k" ]]; then printf '%s=%s\n' "$k" "${!k-}" >>"$tmp" - seen["$k"]=1 + seen_keys+=("$k") replaced=true break fi @@ -145,7 +156,7 @@ upsert_env() { fi for k in "${keys[@]}"; do - if [[ -z "${seen[$k]:-}" ]]; then + if ! has_seen "$k"; then printf '%s=%s\n' "$k" "${!k-}" >>"$tmp" fi done