2010-07-16 29 views
103

bash'de, eşit ve çift eşit test operatörleri arasındaki fark nedir?bash dize eşitliği

[[ "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 

sonuçları:

equal 
equal 
not-equal 
not-equal 

cevap

97

, === için eşanlamlısını (C/C++ insanlar için sanırım) 'dir: içinde

[[ "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 

sonuçlanır. Örneğin, here.

Sadece olmak için çift kontrol edebilir gerçekten emin ya da sadece bash source code bakarak faiz, oralarda ayrıştırma kodunda olmalı, ama ben derhal bulamadım için.

+19

* dize * karşılaştırmaları için fark yoktur, ancak '(' sayısal karşılaştırmalar için '(') karakterini kullanamazsınız ('==' in '(())' veya '-eq kullanmalısınız 'in' [] ',' sına veya '[[]]'. http://stackoverflow.com/questions/2600281/what-is-the-difference-between-operator-and ([buradan] cevabım bakın -in-bash/2601583 # 2601583). –

+21

o == bash tanıtıldı, ancak bourne kabuk bunu desteklemediğini belirterek, aynı zamanda değer. bazı sistemlerde, içeri bin/sh aslında bash/fark edeceğiz ve Diğer sistemler, bourne.Bir kabuk betiği birden fazla sistem üzerinde doğru bir şekilde çalıştığında ancak bir tanesinde başarısız olduğunda bu problemin içine girdim. == bourne desteklenmemesi nedeninin başarısız olmasıydı. – Joe

+4

Not, eğer kontrol ederseniz ksh sözdizimi, sen tek = sözdizimi ile amortisman uyarı almak 'uyarı:. satır 3: '=' eskimiş, kullanım '=='' – brianegge