Personnellement je ne demande pas grand chose à bash, je sous-utilises ses capacités avancées en fait, mais certaines fonctionnalités sont vraiment pratiques, comme les array.
Je veux pouvoir faire ça, et itérer tout ça :
vars=("un deux" blabla)for var in "${var[@]}"doecho"${var}"done
Utiliser des hacks comme ça, ça ne marche pas:
vars='un deux blabla'for var in ${vars}doecho"${var}"done
Et ça, c’est dégueulasse et ça invoque des bugs les soirs de pleine-lune :
Oui je sais on peut aussi modifier IFS, mais bref, tout ça c’est moche et ce sont des nids à problèmes.
Le code de tableau ci-dessus fonctionne sous macOS parce que c’est un exemple très limité, mais dès qu’on passe un tableau en paramètre à une fonction, tout s’écroule.
Ça, ça ne marge pas avec le bash de macOS :
func(){for var in "${@}"doecho"${var}"done}vars=()if"${something}"thenvars+=("blabla")fi
func "$[vars[@]}"
Quand le tableau est vide, alors ${@} n’est pas déclarée dans la fonction, et donc le script s’interrompt à cause de la variable inconnue dès lors qu’on active set -u.
On peut contourner en faisant quelque chose comme ça :
func(){if -z "${@:-}"thenreturnfifor var in "${@}"doecho"${var}"done}vars=()if"${something}"thenvars+=("blabla")fi
func "$[vars[@]}"
Bon, j’ai écrit ce commentaire de mémoire, il y a peut-être encore de nuances obscures, et j’ai peut-être aussi fait des fautes, mais vous voyez l’idée. Il faut dégueulasser les scripts avec ce genre de contournements pour le bash de 2007 de macOS.
ce commentaire est sous licence cc by 4 et précédentes
[^] # Re: le langage est bash, donc le langage est bash
Posté par Thomas Debesse (site web personnel, Mastodon) . En réponse au journal bake : scripter en bash à la « makefile ». Évalué à 4.
Personnellement je ne demande pas grand chose à bash, je sous-utilises ses capacités avancées en fait, mais certaines fonctionnalités sont vraiment pratiques, comme les array.
Je veux pouvoir faire ça, et itérer tout ça :
Utiliser des hacks comme ça, ça ne marche pas:
Et ça, c’est dégueulasse et ça invoque des bugs les soirs de pleine-lune :
Oui je sais on peut aussi modifier
IFS, mais bref, tout ça c’est moche et ce sont des nids à problèmes.Le code de tableau ci-dessus fonctionne sous macOS parce que c’est un exemple très limité, mais dès qu’on passe un tableau en paramètre à une fonction, tout s’écroule.
Ça, ça ne marge pas avec le bash de macOS :
Quand le tableau est vide, alors
${@}n’est pas déclarée dans la fonction, et donc le script s’interrompt à cause de la variable inconnue dès lors qu’on activeset -u.On peut contourner en faisant quelque chose comme ça :
Bon, j’ai écrit ce commentaire de mémoire, il y a peut-être encore de nuances obscures, et j’ai peut-être aussi fait des fautes, mais vous voyez l’idée. Il faut dégueulasser les scripts avec ce genre de contournements pour le bash de 2007 de macOS.
ce commentaire est sous licence cc by 4 et précédentes