Newsgroup: it.comp.os.linux.sys
Titolo: [BASH] errore durante espansione numerica

Salve a tutti.
Ho fatto uno script in bash che mi dà uno strano problema.
In questo script ho una variabile (data) che contiene la data letta da un
file nel formato MMGGAAAA.
Questa variabile viene successivamente spezzettata in 3 variabili
(giorno, mese, anno).
(( giorno=${data:2:2} ));
(( mese=${data:0:2} )); <--- qui è il problema
(( anno=${data:4:4} ));
se la prima parte di data (cioè il mese) è 08 o 09 ottengo un errore:
./backup.sh: ÏÏÏÏÏUUUUUUUUUUUUUUU÷: mese=08: value too great for
base (error token is "08")
Ma se la prima parte di data è compreso tra 01 e 07 oppure è superiore a
10 non ottengo errori!
Qualcuno ha mai riscontrato un comportamento simile?
-- 
|f(x)-f(y)|<=L|x-y|
Per le risposte in mail, occhio all'antispam!

 se la prima parte di data (cioč il mese) č 08 o 09 ottengo un errore:
Perche' viene interpretato come numero in base ottale.
Davide

 Perche' viene interpretato come numero in base ottale.
Capito.
Però non ne esco :°-(
Su man bash ho trovato:
       Constants with a leading 0 are interpreted as  octal  num-
       bers.  A leading 0x or 0X denotes hexadecimal.  Otherwise,
       numbers take the form [base#]n, where base  is  a  decimal
       number  between 2 and 64 representing the arithmetic base,
       and n is a number in that base.
Allora ho provato:
(( mese=[10#]${data:0:2} ));
Ma mi dice:
./backup.sh: ÏÏÏÏÏUUUUUUUUUUU: mese=[10#]08 : syntax error:
operand expected (error token is "[10#]08 ")
Ho provato anche in altri modi, ma mi dà sempre errore.


 (( mese=[10#]${data:0:2} ));
Non chiedere perche`, ma e` senza parentesi quadre...
Cioe`:
echo $[ 04 + 10#08 ]
ritorna, correttamente, 12.
bye,
-- 
  Piergiorgio Sartor

 Perň non ne esco :°-(
Ma se il tuo problema e' avere la data separata, non puoi usare
DAY=`date +%d`
MON=`date +%m`
YEA=`date +%y`
?
Davide

 Non chiedere perche`, ma e` senza parentesi quadre...
Grazie mille, ora funziona!
Sei libero di non rispondermi, ma... perchè? ;)
Avevo intenzione di scrivere al mantainer della pagine man, ma non
vorrei scrivere cavolate...


 
No, perchè quel campo contiene la data dell'ultimo backup salvata in un
file, in base alle quale si decide se il backup deve essere incrementale
oppure totale.
E dev'essere in quel formato perchè un'altra parte dello script lo
richiede in quel formato. In realtà potrei salvarla anche in un altro
formato, ma dovrei aggiungere del codice per trasformala e usarla
nell'altra parte dello script. E allora mi sono intestardito a cercare
la soluzione più breve...


 vorrei scrivere cavolate...
Magari ti conviene cercare se vi sono incongruenze
tra questa dicitura [base#] ed altre spiegazioni.
Dopo, in caso trovi qualcosa, puoi contattare chi di dovere.
bye.
-- 
  Piergiorgio Sartor

> Sei libero di non rispondermi, ma... perchè? ;)
Beh il passo della man page è 
         Constants  with  a leading 0 are interpreted as octal num-
       bers.  A leading 0x or 0X denotes hexadecimal.  Otherwise,
       numbers  take  the  form [base#]n, where base is a decimal
       number between 2 and 64 representing the arithmetic  base,
       and n is a number in that base. 
Credo che le parentesi quadre andassero interpretate come *opzionale*. 
[ghigo@moscow ghigo]$ rpm -qv bash
bash-2.05-8