[ LUGOS ] Formatianje stevilk?

Dezo Programing at nib.si
Sat 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 at rzs-hm.si]
Sent: Saturday, April 07, 2001 11:57 AM
To: lugos-list at 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);'




More information about the lugos-list mailing list