Commande introuvable en Bash if-ELSE condition lors de l'utilisation de [! -d “$DIR”]

J'ai un code comme celui-ci

#!/bin/bash 
DIR="test_dir/";
if [! -d "$DIR"]; then
    # If it doesn't create it
    mkdir $DIR
fi

Mais pourquoi l'exécution, il m'a donné ceci:

./mycode.sh: line 16: [!: command not found

Quelle est la bonne façon de le faire?

Le nom [ est le nom d'une commande, non aléatoire de la ponctuation. Tout comme vous avez besoin d'un espace entre cat et /etc/passwd dans cat/etc/passwd, si vous avez besoin d'un espace entre [ (le nom de la commande) et ! (l'un de ses arguments). De même, le dernier argument doit être ]. Cette exigence remonte à l'histoire ancienne (7ème Édition UNIX™ de 1978, ou plus tôt) lorsque le shell n'ont pas de test (aka [) intégré et la seule test commande a été /bin/test et son (dur) lien /bin/[.

OriginalL'auteur neversaint | 2013-08-08