103
In bash
, qual è la differenza, se esiste, tra gli operatori di prova uguale e doppio uguale?uguaglianza stringa bash
[[ "a" = "a" ]] && echo equal || echo not-equal
[[ "a" == "a" ]] && echo equal || echo not-equal
[[ "a" = "b" ]] && echo equal || echo not-equal
[[ "a" == "b" ]] && echo equal || echo not-equal
risultati in:
equal
equal
not-equal
not-equal
Non c'è differenza per i confronti * stringa *, ma non puoi usare '=' per confronti numerici in '(())' (devi usare '==' in '(())' o '-eq 'in' [] ',' test' o '[[]]'. Guarda la mia risposta [qui] (http://stackoverflow.com/questions/2600281/quello-è-la-differenza-dall'operatore-e -in-bash/2601583 # 2601583) . –
Vale anche la pena notare che == è stato introdotto in bash, ma la shell di Bourne non lo supporta.In alcuni sistemi, noterete che/bin/sh è in realtà bash, e in altri sistemi, è bourne. Mi sono imbattuto in questo problema quando uno script di shell funzionava correttamente su più sistemi, ma falliva su uno. == non essere supportato a bourne era il motivo per cui non funzionava su uno – Joe
Nota, in ksh se si controlla la sintassi, si ottiene un avviso di deprezzamento con single = sintassi. 'warning: riga 3: '=' obsoleto, uso '=='' – brianegge