2009-09-09 28 views
5

Sto tentando di aggiornare uno script di bash scritto da qualcun altro e sono arrivato su una riga di cui non sono sicuro.Test script shell

Qualcuno può dirmi che cosa il seguente controllo fa:

if [ :$RESULT != :0,0 ] 

Penso che sia il controllo per un certo valore a $ RISULTATO, possibilmente con una stringa?

Qualsiasi aiuto apprezzato!

risposta

4

Penso che lo : sia un trucco comune che la gente usa nel caso in cui la variabile sia vuota.

Se è vuota, allora la shell avrebbe questo:

if [ != 0,0 ] 

che sarebbe un errore di sintassi. Mettendo il : davanti significa che se la variabile è vuota il guscio ha questo:

if [ : != :0,0 ] 

che non è un errore di sintassi e sarebbe (correttamente) rapporto falso.

11

Il comando [ è solo un alias del comando test, la parentesi quadra di chiusura solo di essere zucchero sytax (il comando [ ignora l'ultimo argomento se si tratta di una parentesi di chiusura), quindi la linea in realtà si legge

if test :$RESULT != :0,0 

Confronta se la stringa :$RESULT corrisponde alla stringa :0,0. Il colon è preposto per il caso che la variabile $RESULT sia vuota. La linea sarà simile alla seguente, se il colon è stato omesso e $RESULT era una stringa vuota:

if test != 0,0 

Questo porterebbe ad un errore, dal momento che test si aspetta un argomento prima di !=. Un'alternativa sarebbe quella di utilizzare le virgolette per indicare che v'è un argomento, che è una stringa vuota:

if test "$RESULT" != 0,0 
# Will become 
if test "" != 0,0 

La variazione che hai postato è più portabile, però.

+0

Prova 'man bash' e cercare il comando incorporato' test' per ulteriori informazioni – soulmerge

+0

Va bene, seguilo, grazie! Quindi è in realtà il confronto con la stringa "0,0"?Chiedo solo come risultato variabile non avrebbe mai quel valore! Mi chiedevo se lo 0,0 fa qualcos'altro. Forse una stringa vuota? –

+0

No, '0,0' è una stringa e l'operatore'! = 'Confronta le stringhe, quindi controlla se' $ RESULT' è la stringa '0,0'. Prova "test uomo". – soulmerge

1

A volte viene visualizzato un valore x utilizzato nel modo in cui i due punti vengono utilizzati nell'esempio.

Il metodo preferito per fare questo tipo di test in Bash è quello di utilizzare la doppia parentesi quadra:

if [[ $RESULT != 0,0 ]] 

La forma a doppia staffa permette una maggiore flessibilità, la leggibilità migliorata, ridotta necessità di fuga e citando e pochi più funzioni. Vedere this page per ulteriori informazioni.

Se si desidera verificare i valori numerici, invece di stringhe o file, utilizzare le doppie parentesi:

if ((3 + 4 > 6))