diff --git a/docker-setup.sh b/docker-setup.sh index 0395d20f4..17d8f8db8 100755 --- a/docker-setup.sh +++ b/docker-setup.sh @@ -129,7 +129,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 @@ -138,7 +149,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 @@ -150,7 +161,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