le cours d'IUT que j'utilise pour apprendre les bases utiles pour écrire un script ne mentionne pas la commande composée if [ ] mais seulement if [[ ]]. Sont-elles identiques par leurs effets ou y a-t-il une différence?
Cours d'IUT:
j'ai testé les 2 possibilités dans ce scriptLa commande interne composée [[ est souvent utilisée avec la commande interne composée
if. Elle permet l’évaluation d’expressions conditionnelles portant sur des objets aussi différents
que les permissions sur une entrée, la valeur d’une chaîne de caractères ou encore l’état d’une
option de la commande interne set.
Syntaxe :
[[ expr_cond ]]
Code : Tout sélectionner
#!/bin/bash
if [[ $(whoami) = 'root' ]]; then
echo "You are root"
else
echo "you are not"
fiCode : Tout sélectionner
~$ a="au revoir"
[ $a == 123 ]
echo $?
bash: [: too many arguments
2
~$ a="au revoir"
[[ $a == 123 ]]
echo $?
1
~$ a="au revoir"
[[ $a == "au revoir" ]]
echo $?
0
Code : Tout sélectionner
~$ a="au revoir"
[ "$a" == 123 ]
echo $?
1l'IA me propose une meilleure version de l'affaire:The error "too many arguments" occurs because the variable $a is being compared without proper quoting, leading to unexpected behavior. Always quote your variables in conditions, like this: [ "$a" == 123 ]
Code : Tout sélectionner
~$ a="au revoir"
[ "$a" = 123 ]
echo "$?"
1Et le point final:
Code : Tout sélectionner
[[ is bash's improvement to the [ command. It has several enhancements that make it a better choice if you write scripts that target bash. My favorites are:
It is a syntactical feature of the shell, so it has some special behavior that [ doesn't have. You no longer have to quote variables like mad because [[ handles empty
strings and strings with whitespace more intuitively. 

