2010-07-16 13 views
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 

risposta

97

Non c'è alcuna differenza, == è sinonimo di = (per le persone C/C++, presumo). Vedere here, ad esempio.

Si potrebbe doppio controllo solo per essere veramente sicuri o semplicemente per il vostro interesse, cercando al bash source code, dovrebbe essere da qualche parte nel codice di analisi lì, ma non ho potuto trovare immediatamente.

+19

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) . –

+21

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

+4

Nota, in ksh se si controlla la sintassi, si ottiene un avviso di deprezzamento con single = sintassi. 'warning: riga 3: '=' obsoleto, uso '=='' – brianegge