[
La commande retourne l'état de sortie zéro si expression, contenue dans ses arguments, est considérée comme vraie et non nulle comme état de sortie si expression, contenue dans ses arguments, est considérée comme fausse. Il échoue également avec le message d'erreur si son dernier argument n'est pas ]
(ceci est fait uniquement pour des raisons esthétiques).
Par exemple:
[ hello ]
echo "Exit-status of [ hello ] is:" $?
[ abc = abc ]
echo "Exit-status of [ abc = abc ] is:" $?
[ ]
echo "Exit-status of [ ] is:" $?
[ abc = def ]
echo "Exit-status of [ abc = def ] is:" $?
… Produira:
Le statut de sortie de [hello] est: 0 - car la chaîne non vide est considérée comme vraie
. Le statut de sortie de [abc = abc] est: 0 - car 'abc' est vraiment identique à 'abc' Le
statut de sortie de [] est : 1 - car la chaîne vide est considérée comme fausse
. Le statut de sortie de [abc = def] est: 1 - parce que 'abc' diffère vraiment de 'def'
Cependant, bash et de nombreux autres shells n'appellent généralement pas /bin/[
(ou /usr/bin/[
) dans ces cas-là, mais appellent une commande intégrée avec exactement le même comportement (uniquement pour des raisons de performances). Pour appeler /bin/[
(et non le substitut intégré au shell), vous devez spécifier explicitement son chemin (par exemple /bin/[ hello ]
, vous n'avez pas besoin de préfixer ]
avec dirname si ☺ ), ou configurer le shell pour ne pas utiliser un substitut intégré (par exemple, enable -n [
en bash).
PS: Comme cela a été dit dans d'autres réponses, [
est lié à test
. Mais test
, contrairement à [
, ne nécessite pas ]
le dernier argument (et ne l'attend pas du tout; l'ajout ]
d' test
arguments supplémentaires peut entraîner l'échec du message d'erreur ou le renvoi d'un résultat erroné) . Le /bin/test
et /bin/[
peut résoudre le même fichier (par exemple , un est un lien symbolique , dans ce cas , le détournement de comportement est probablement mis en œuvre par l' analyse de la commande actuellement appelée dans le test
/ [
code lui - même) ou des fichiers différents. En test
outre, shell appelle généralement le substitut intégré, sauf si path est explicitement spécifié ( /bin/test
) ou s'il est configuré pour ne pas le faire (enable -n test
)
PPS: Contrairement à test
and [
, modern if
n’est jamais un vrai fichier. Cela fait partie de shell (par exemple bash) syntaxe: if commandA; then commandB; fi
(sauts de ligne peuvent être utilisés à la place des points - virgules) provoque commandB
à exécuter si et seulement si vous êtes commandA
liquide' zéro état. Cela correspond parfaitement au comportement de test
ou [
, permettant de les combiner comme if [ "$a" = foo ]; then …; fi
(ou if test "$a" = foo; then …; fi
- tout simplement moins lisibles) . Cependant, les scripts modernes utilisent souvent à la [[
place de test
ou [
, qui (en tant que if
) n'est jamais un fichier réel, mais fait toujours partie de la syntaxe du shell.
PPPS: En ce qui concerne man
- ne vous attendez jamais man
à avoir un article sur chaque commande de votre système de fichiers. Infos sur certaines commandes (même « réel », basé sur des fichiers) peuvent être manquants, informations sur certains shell Encastrements peut - être présent non seulement dans un article consacré à l' enveloppe spécifique (qui est l'endroit où vous certainement y trouver des informations sur test
, [
, if
, [[
). Pourtant, beaucoup de distributions ont des man
articles explicites pour test
et [
. (À propos --help
, ce n'est pas reconnu test
pour une raison évidente: il doit gérer des cas comme par exemple a=--help; test "$a"
: sur certaines distributions [ --help
(sans fermer ]
), l'aide est toujours affichée, sur d'autres non.)
[
fait référence à latest
commande si, nonexpr
, il devrait donc êtreman test