Re: [bash]: strano problema con case
perche' metti quelle parentesi tra [0-9]?
cosa volevi testare di preciso?
se vuoi che la variabile contenga solo numeri e al massimo un +
all'inizio, potresti usare una espressione regolare...
$ a=21; [[ $a =~ "^\+?[0-9]+$" ]] && echo "x e' un intero positivo"
...o al limite un case combinato con una "espansione"
$ a=21; case ${a//[0-9]/} in "" | +) echo "x e' un intero positivo";; esac
l'espansione che pratica il case nei suoi test non e' una espressione
regolare, ma un semplice "globbing"... quindi non puoi farne molto
$ echo $SHELL
/bin/bash
$ x=21; case $x in +([0-9])) echo "x is an integer";; esac
x is an integer
gia' la risposta che ti da qui bash e' strana, perche' da come l'hai
scritto non dovrebbe entrare... visto che x non inizia con un +
$ echo "x=21; case $x in +([0-9])) echo "x is an integer";; esac" >> test.sh
$ /bin/bash test.sh
test.sh: line 1: syntax error near unexpected token `('
test.sh: line 1: `x=21; case 21 in +([0-9])) echo x is an integer;; esac'
$
secondo me, quelle parentesi le confonde con una lista di comandi in
subshell
infatti, se per assurdo volevi testare delle parentesi, dovevi escapizzarle
$ x="(2)"; case $x in \([0-9]\)) echo "x e' un numero tra parentesi";; esac
x e' un numero tra parentesi
secondo me il comportamento e' quantomeno curioso
specialmente per la diversita' di comportamento tra riga di comando e
script.
se non trovi risposta qui, prova a mandare il quesito su gnu.bash.bug
c'e' una persona molto cortese (Chet Ramey) che segue i bug di bash, e
di sicuro di dice due parole chiarificanti
ciao
Reply to: