a8m / a8m/envsubst

Feature Request / Possible bug: Support nested variables enclosed by raw string

Ouverte
#30 2 commentaires 3 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Go
Étoiles
907
Forks
96
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I have a weird issue where envsubst is not working as expected.

When I add only a single a default variable to the right side of the experssion it will work similarly as a default POSIX shell. But when I add additional text to the default it start to do some strange behaviour.

I'll provide some examples, I believe that will be the best description.

sh use case:
``` bash
docker run --rm -it debian:buster-slim sh
# export VAR1="shouldevaluate"
# export EMPTY_VAR=""
# export MAIN_VAR="${EMPTY_VAR:-$VAR1}"
# echo $MAIN_VAR
shouldevaluate
#
#
# export MAIN_VAR="${EMPTY_VAR:-asdqwe$VAR1}"
# echo $MAIN_VAR
asdqweshouldevaluate
#
#
# export MAIN_VAR="${EMPTY_VAR:-asdqwe $VAR1 qweasd}"
# echo $MAIN_VAR
asdqwe shouldevaluate qweasd
#
#
# export MAIN_VAR="${EMPTY_VAR:-asdqwe${VAR1}qweasd}"
# echo $MAIN_VAR
asdqweshouldevaluateqweasd
```

And this happens when I try to use the same method in envsubst.
``` bash
# cat test.template
name = ${EMPTY_VAR:-$VAR1}

name = ${EMPTY_VAR:-asdqwe$VAR1}

name = ${EMPTY_VAR:-asdqwe $VAR1 qweasd}

name = ${EMPTY_VAR:-asdqwe${VAR1}qweasd}
#
#
# envsubst < test.template
name = shouldevaluate

name = asdqwe$VAR1

name = asdqwe $VAR1 qweasd

name = asdqwe${VAR1qweasd}
```

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

The issue is about envsubst not correctly handling nested variable expansions within default values, like ${EMPTY_VAR:-asdqwe$VAR1}. Start by examining the parsing logic in the main package, likely in parse.go or subst.go. Look for how default values are processed and where variable substitution within them is applied. Run the provided test cases to reproduce the bug, then modify the parser to recursively evaluate variables inside default strings. Check existing tests in the test suite to ensure changes don't break other substitutions.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
go, shell
Domaine
cli, tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.