Contrairement à la commande test, il n'est plus nécessaire d'entourer les variables avec des guillemets.
Les différentes syntaxes utilisables :
$ echo $null
 
$ test -z "$null"
$ echo $?
0
$ [ -z "$null" ]
$ echo $?
0
$ [[ -z $null ]]
$ echo $?
0
$ [[ -z "$null" ]]
$ echo $?
0
$ [[ $null = "" ]]
$ echo $?
0
$
Les opérateurs suivants ont été ajoutés :
| Opérateurs | Code de retour | 
|---|---|
| $chaine = modele | Vrai si $chaine correspond au modèle | 
| $chaine != modele | Vrai si $chaine ne correspond pas au modèle | 
| $chaine1 < $chaine2 | Vrai si $chaine1 est lexicographiquement avant $chaine2 | 
| $chaine1 > $chaine2 | Vrai si $chaine1 est lexicographiquement après $chaine2 | 
En utilisant les expressions, il est possible de comparer des chaines à des modèles identiques à celles permettant le remplacement des noms de fichiers.
| Caractères spéciaux pour modèles de chaines de caractères | Signification | 
|---|---|
| Caractères spéciaux valables dans tous les shells : | |
| * | 0 à n caractères | 
| ? | 1 caractère quelconque | 
| [abc] | 1 caractère parmis ceux inscrits entre les crochets | 
| [!abc] | 1 caractère ne faisant pas partie de ceux inscrits entre les crochets | 
| Caractères spéciaux non valides en Bourne Shell. En bash, il faut activer l'option extglob (shopt -s extglob) | |
| ?(expression) | de 0 à 1 fois l'expression | 
| *(expression) | de 0 à n fois l'expression | 
| +(expression) | de 1 à n fois l'expression | 
| @(expression) | 1 fois l'expression | 
| !(expression) | 0 fois l'expression | 
| ?(expression1 | expression2 | ...) *(expression1 | expression2 | ...) +(expression1 | expression2 | ...) @(expression1 | expression2 |...) !(expression1 | expression2 | ...) | alternatives | 
Exemple :
Le script suivant test si le numéro de téléphone saisi correspond bien au format +33240346523 ou 0240346523
$ nl test_telephone.sh
     1  #! /bin/bash
 
     2  echo -e "Saisir un numéro de téléphone : \c"
     3  read telephone
 
     4  # Test si le téléphone saisi est de la forme
     5  # +33240346523 ou 0240346523
 
     6  if [[ $telephone = @(+33)@([1-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9]) ||
     7        $telephone = @(0)@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9])@([0-9]) ]]
     8  then
     9          echo "Le numéro est correct"
    10          exit 0
    11  else
    12          echo "Le numéro est incorrect"
    13          exit 1
    14  fi
$ ./test_telephone.sh
Saisir un numéro de téléphone : 0240020202
Le numéro est correct
$ ./test_telephone.sh
Saisir un numéro de téléphone : +33256985478
Le numéro est correct
$ ./test_telephone.sh
Saisir un numéro de téléphone : 2356958457
Le numéro est incorrect
$ ./test_telephone.sh
Saisir un numéro de téléphone : +33025146987
Le numéro est incorrect
$ ./test_telephone.sh
Saisir un numéro de téléphone : g52365
Le numéro est incorrect
$