Obtenir l’erreur «commande introuvable» lors de la comparaison de deux chaînes dans Bash

Tout mon script est actuellement ceci:

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

et si j’entre

 TestSelect.sh 

Je reçois

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

Comment puis-je réparer cela?

C’est un problème:

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

Des espaces sont nécessaires entre crochets, utilisez-le comme ceci:

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

Sur une note connexe, des espaces sont également requirejs autour de [ ] :

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

Notez que les variables doivent être placées entre guillemets doubles à l’intérieur de [ ] pour empêcher le fractionnement et le regroupement des mots. Les guillemets doubles sont également utiles lorsque l’une des variables comparées n’est pas définie – shell affichera une erreur de syntaxe sinon.

Regardez le post suivant pour comprendre pourquoi nous avons besoin d’espaces autour de [ ] :

  • Pourquoi devrait-il y avoir un espace après ‘[‘ et avant ‘]’ dans Bash?

Un autre article relatif aux autres éléments de syntaxe nécessitant également des espaces:

  • Pourquoi les espaces sont-ils parfois nécessaires autour des métacaractères?

Enfin, cet article parle de la différence entre [[ ]] et [ ] :

  • Quelle est la différence entre les crochets simples et doubles dans Bash?