Sono stato scripting Bash per un po 'e mi chiedo se c'è qualche differenza tra queste due forme di negazione con il comando test
:C'è una differenza tra la negazione prima/dopo un comando di test?
if [ ! condition ]; then
fi
if ! [ condition ]; then
fi
La prima dice alla shell di passare gli argomenti per testare ! condition
, lasciando che il programma si occupi della negazione stessa. D'altra parte, il secondo passa condition
per testare e lascia che la shell stessa annulli il codice di errore.
Ci sono delle insidie di cui dovrei essere a conoscenza quando scelgo tra queste due forme? Quali valori di $condition
potrebbero rendere i risultati diversi tra loro?
(mi sembra di ricordare la lettura di un articolo qualche tempo fa discutere di questo, ma non mi ricordo come trovarlo/esattamente ciò che è stato discusso.)
Non proprio una trappola, dal momento che è difficile costruire uno scenario realistico in cui ciò accada, ma tieni presente che in '! [condizione] 'il'! 'è un operatore di shell, che nega lo stato di uscita di un comando, mentre in' [! condizione] 'il'! 'è solo un argomento stringa per il comando' ['. Dopo 'foo ="! Bar "', confronta '[" $ pippo "]' con '[$ pippo]'. – chepner