Dans Bash, test
et [
sont des modules intégrés au shell.
Le site double support qui est un mot-clé de l'interpréteur de commandes, permet de bénéficier de fonctionnalités supplémentaires. Par exemple, vous pouvez utiliser &&
et ||
au lieu de -a
et -o
et il y a un opérateur de correspondance d'expression régulière =~
.
De plus, dans un test simple, les crochets doubles semblent être évalués beaucoup plus rapidement que les crochets simples.
$ time for ((i=0; i<10000000; i++)); do [[ "$i" = 1000 ]]; done
real 0m24.548s
user 0m24.337s
sys 0m0.036s
$ time for ((i=0; i<10000000; i++)); do [ "$i" = 1000 ]; done
real 0m33.478s
user 0m33.478s
sys 0m0.000s
Les accolades, en plus de délimiter un nom de variable sont utilisées pour expansion des paramètres pour que vous puissiez faire des choses comme :
-
Tronquer le contenu d'une variable
$ var="abcde"; echo ${var%d*}
abc
-
Faites des substitutions similaires à sed
$ var="abcde"; echo ${var/de/12}
abc12
-
Utiliser une valeur par défaut
$ default="hello"; unset var; echo ${var:-$default}
hello
-
et plusieurs autres
De plus, les expansions d'accolades créent des listes de chaînes de caractères qui sont généralement itérées dans des boucles :
$ echo f{oo,ee,a}d
food feed fad
$ mv error.log{,.OLD}
(error.log is renamed to error.log.OLD because the brace expression
expands to "mv error.log error.log.OLD")
$ for num in {000..2}; do echo "$num"; done
000
001
002
$ echo {00..8..2}
00 02 04 06 08
$ echo {D..T..4}
D H L P T
Notez que les fonctions de zéro en tête et d'incrémentation n'étaient pas disponibles avant Bash 4.
Merci à gboffi de m'avoir rappelé les expansions d'accolades.
Les doubles parenthèses sont utilisées pour opérations arithmétiques :
((a++))
((meaning = 42))
for ((i=0; i<10; i++))
echo $((a + b + (14 * c)))
et ils vous permettent d'omettre le signe dollar sur les variables de type entier et tableau et d'inclure des espaces autour des opérateurs pour plus de lisibilité.
Les parenthèses simples sont également utilisées pour tableau des indices :
array[4]="hello"
element=${array[index]}
Les accolades sont nécessaires pour (la plupart/toutes ?) les références de tableaux du côté droit.
de l'éphémère m'a rappelé que les parenthèses sont également utilisées pour les sous-ensembles. Et qu'elles sont utilisées pour créer des tableaux.
array=(1 2 3)
echo ${array[1]}
2