[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: