[gull] Truc et astuces: bash: jouons avec les variables et eval

Félix Hauri felix at f-hauri.ch
Sat Nov 5 10:57:15 CET 2011


On Thu, Nov 03, 2011 at 11:01:30PM +0100, Jean-Pierre Rupp wrote:
> Nice hacks!
Merci, mais je me disais qu'on *doit* pouvoir faire plus ``simple''...
(sed est un outil puissant!)

> Le 2 novembre 2011 15:26, Félix Hauri <felix at f-hauri.ch> a écrit :
> > $ eval $(
> >    env LANG=fr_CH date +"$(
> >        date --help |
> >            sed -ne '/^  %[^ %]\{1,4\} .*$/{
> >                s/^  %\([^ ]*\) .*$/\1/;
> >                y|:|_|;
> >                p;
> >                y|_|:|;
> >                p}' |
> >        xargs printf "DATE_%s=\"%%%s\" "
> >        )"
> >    )
> > ...
> > $ echo $DATE_{x,X}
> > 02. 11. 11 15:14:39

$ eval $(
    env LANG=fr_CH date +"$(
	date --help |
	    sed -ne '/^  %[^ %]\{1,4\} .*$/{
                s/^ *%\([^ ]*\) .*$/DATE_\1=\"%\1\"/;
		:l;
		/[^:%]:/{
		    s/:/_/;
		    tl};
		p}'
	)"
    )
$ echo $DATE_{x,X}
05. 11. 11 10:33:40

Au passage, vous aviez bien sûr compris que si ``LANG=C'' au lieu 
de ``LANG=fr_CH'', alors:
$ echo $DATE_{x,X}
11/05/11 10:31:26
de même que si ``LANG=fr_CH.UTF-8'', alors $DATE_B pourrait donner:
``février'', en particulier dans une console en Latin-1:

$ eval $(env LANG=fr_CH.UTF-8 date -d '2000/02/01 12:34:56' +"$(date --help |
    sed -ne '/^  %[^ %]\{1,4\} .*$/{s/^ *%\([^ ]*\) .*$/DATE_\1=\"%\1\"/;
             :l;/[^:%]:/{s/:/_/;tl};p}')")

$ echo $DATE_{A,d,B,Y,T}
mardi 01 février 2000 12:34:56

(Dois-je préciser que j'utilise le charset Latin-1!?)

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list