2013-11-01 10 views
33

Tutto il mio script è attualmente presente:Ottenere "command not found" errore durante il confronto di due stringhe in Bash

#!/bin/sh 
clear; 
blanko=""; 
# Dummy-Variablen 
variable=Testvariable; 
if [[$variable == $blanko]]; 
then 
    echo "Nichts da!" 
else 
    echo $variable 
fi 

e se entro

TestSelect.sh 

ottengo

/usr/bin/TestSelect.sh: line 6: [[Testvariable: command not found 
Testvariable 

come posso risolvere questo?

+4

suggerimento per il futuro: [shellcheck] (http://www.shellcheck.net) punterà automaticamente questo e altri problemi di base. –

+0

Grazie a tutte le mie ricerche non ho trovato questo sito. :-) – EpsilonAlpha

+1

Un altro puntatore: hai solo bisogno di un'istruzione che termina con ';' se stai mettendo _multiple_ dichiarazioni su una singola riga. – mklement0

risposta

58

Questo è problema:

if [[$variable == $blanko]]; 

Gli spazi sono necessari tra parentesi quadre, usarlo in questo modo:

[[ "$variable" == "$blanko" ]] && echo "Nichts da!" || echo "$variable" 
+0

Grazie mille. In Germania abbiamo un proverbio: "Non vedo la foresta perché gli alberi" – EpsilonAlpha

+0

Nota, tuttavia, che non è necessario duplicare i riferimenti delle variabili (anche se i valori hanno spazi incorporati). – mklement0

+0

@ mklement0: Solo per le buone pratiche li cito sempre, potrebbe non essere sempre necessario. – anubhava

2

In una nota correlata, gli spazi sono richiesti in tutto [ ] così:

if [ "$variable" = "$blanko" ]; then 
    # more code here 
fi 

Si noti che le variabili devono essere racchiuse tra virgolette all'interno di [ ] per impedire la divisione delle parole e il globbing. Le doppie virgolette aiutano anche quando una delle due variabili confrontate non è impostata - la shell genererà altrimenti un errore di sintassi.

un'occhiata al seguente post per capire perché abbiamo bisogno di spazi attorno [ ]:

Un altro post correlati che parla di altri elementi di sintassi che hanno bisogno di spazi così:

Infine, questo post parla della differenza tra [[ ]] e [ ]:

Problemi correlati