[gull] Truc et astuces: bash: jouons avec les variables et eval
Arnaud
listes.00 at gmail.com
Sun Nov 6 18:11:43 CET 2011
Le 02. 11. 11 15:26, Félix Hauri a écrit :
> Petite démo, à toutes fins utiles (c'est du bash>=2.05b)
>
> $ eval $(
> env LANG=fr_CH date +"$(
> date --help |
> sed -ne '/^ %[^ %]\{1,4\} .*$/{
> s/^ %\([^ ]*\) .*$/\1/;
> y|:|_|;
> p;
> y|_|:|;
> p}' |
> xargs printf "DATE_%s=\"%%%s\" "
> )"
> )
Il y a ça sinon, mais bon ça n'utilise pas du tout eval (ce qui sort un
peu du sujet... mais j'avais fait ça en cherchant à comprendre pourquoi
'date --help' avait été utilisé...). (en bash 4.1)
Dans un fichier nommé 'testdate', à sourcer dans le .bashrc par exemple:
$ function my { date +"$(echo $@ | sed 's/DATE_\(.\)/%\1/g')" | sed -e
's/[%|DATE_]//g;s/\.\ /\./g'; }
$ . testdate
$ my DATE_{X,x,,c,E}
18:00:41 06.11.11 dim 06 nov 2011 18:00:41 C
Et si ça peut servir à quelqu'un, en 1 ligne par déclaration de date, et
en 1 ligne tout court (c'est pas très léger et ça peut être amélioré je
sais ^^):
$ function my { if [ "$1" == "l" ]; then for list in $@; do date
+"$(echo $list | sed 's/DATE_\(.\)/%\1/g')" | sed -e
's/[%|DATE_]//g;s/\.\ /\./g;/^l$/d'; done; else date +"$(echo $@ | sed
's/DATE_\(.\)/%\1/g')" | sed -e 's/[%|DATE_]//g;s/\.\ /\./g'; fi; }
$ . testdate
$ my l DATE_{X,x,,c,E}
18:00:42
06.11.11
dim 06 nov 2011 18:00:42 C
J'avais un peu utilisé eval pour utiliser des noms de variables
dynamiques, mais ça m'avait posé quelques soucis en bash ...
En tout cas, merci pour cette astuce avec eval :)
More information about the gull
mailing list