[ LUGOS ] Formatianje stevilk?
Dezo
Programing na nib.si
Sob Apr 7 12:06:44 CEST 2001
meni pa dela tako:
DATE="`date +%d`"
Lp,
>> Damir Dezeljin
-----Original Message-----
From: Metod Kozelj [mailto:metod.kozelj na rzs-hm.si]
Sent: Saturday, April 07, 2001 11:57 AM
To: lugos-list na lugos.si
Subject: Re: [ LUGOS ] Formatianje stevilk?
Howdy!
On Fri, 6 Apr 2001, David Klasinc wrote:
> > DATE=`date +%d`
> > DATE=`expr $DATE - 1`
> >
> > Mi namesto 05 vrne 5 v spremenljivki DATE.
> >
> > Kako bi preprical, da bi ven dobil 05? (Torej vedno 2 mestno cifro (z
vodeco 0
> > ce je potrebno).
>
> DATE=`date +%d`
> DATE=`expr $DATE - 1`
> LEN=`echo $DATE | wc -c | cut -d " " -f 7`
> if [ $LEN -lt 3 ]; then
> DATE=0${DATE}
> fi
> echo $DATE
>
> Ampak je najbrz se kje kak drug lepsi in hitrejsi nacin... :)
Tole zgoraj je res malo grdo. Lepse bo slo takole:
DATE=`date +%d`
DATE=`expr $DATE - 1`
DATE=`printf %02d $DATE`
Vsaj v UNIX variantah, ki jih jaz uporabljam (Linux, HP-UX, Tru64) printf
obstaja.
Pa se dve stvari:
1. Precej aritmeticnih operatorjev (recimo $(( ali pa expr) predpostavi
osmiski sistem, ce je prva cifra v stevilki 0. Samo po sebi ni nic
narobe, ampak zna biti tezava pri izrazu `expr 09 - 1`. Ponavadi se
lahko uporabi notacija `expr 10#$NUM` za uporabo desetiskega sistema.
Oziroma kar poljubnega sistema.
2. expr je zunanji ukaz. Bolje je uporabiti aritmetiko samega shell
interperterja (zaradi hitrosti izvajanja). Recimo:
DATE=$(( 10#`date +%d` - 1 ))
zamenja prvi dve vrstici konstrukta zgoraj, pa se malo hitreje je.
In deluje v vseh POSIX shellih (bash, posix sh na Tru64, posix sh na
HP-UX, ...)
Peace!
Mkx
---- perl -e 'print
$i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Dodatne informacije o seznamu Starilist