2011-11-05 22 views
6

Sto studiando gli script di bash. Ho ottenuto lo script di esempio qui sotto dal web.confronto di stringhe in script bash

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

Qual è x ​​sulla quinta linea (x$str e x"test")? "x" ha un significato speciale?

risposta

2

È per assicurarsi che il lato sinistro dell'espressione nell'esempio non sia vuoto. Se str non fosse impostato, la condizione sarebbe altrimenti [ == "test" ] che darebbe un errore.

Invece di utilizzare una singola lettera per renderla non vuota, è anche possibile inserire la variabile all'interno di caratteri a doppia virgoletta e saltare completamente lo x ([ "$str" == "test" ]).

9

Nessun significato speciale, ma se $str era vuoto, poi il

if [ $str == "test" ] 

comporterebbe un cambio di nulla in prova e sarebbe come questo

if [ == "test" ] 

che sarebbe una Errore di sintassi. Aggiunta del X prima risolverebbe questo, tuttavia citando come questo

if [ "$str" == "test" ] 

è un modo più leggibile e comprensibile ottenere lo stesso.

+0

Sembra che l'esempio sia stato preso dai test usati per testare una nuova compilazione bash, solo il riferimento che ho trovato al metodo antefatto x stava sostenendo che il metodo "" era migliore e se il test case doveva essere cambiato. – ewanm89

+0

Ciò che è meglio è una questione di gusti - ho visto il metodo x in alcuni punti, e sono sicuro che ci siano posti nelle condutture o sostituzioni profonde dove renderebbe il codice più leggibile - tuttavia per casi semplici come quello sopra, il "" è intuitivamente compreso e non avrebbe mai sollevato una domanda. – Soren

+0

Sì, non ho detto che era il mio argomento, ho detto che era l'argomento sulla mailing list GNU bash. – ewanm89