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 :)
_______________________________________________
gull mailing list
[email protected]
http://forum.linux-gull.ch/mailman/listinfo/gull

Répondre à