Dans la plupart des cas, [
est un shell intégré et est équivalent à test
. Cependant, test
il existe également en tant qu'exécutable autonome: c'est ce que /bin/[
vous avez vu. Vous pouvez tester cela avec type -a [
(sur un système Arch Linux, en cours d'exécution bash
):
$ type -a [
[ is a shell builtin
[ is /bin/[
Donc, sur mon système, j'en ai deux [
: le shell de mon shell et l'exécutable /bin
. L'exécutable est documenté dans man test
:
TEST(1) User Commands TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
DESCRIPTION
Exit with the status determined by EXPRESSION.
[ ... ]
Comme vous pouvez le voir dans l'extrait de la page de manuel citée ci-dessus, test
et [
sont équivalentes. Les commandes /bin/[
et /bin/test
sont spécifiées par POSIX, c'est pourquoi vous les trouverez malgré le fait que de nombreux shells les fournissent également en tant que commandes intégrées. Leur présence garantit que des constructions comme:
[ "$var" -gt 10 ] && echo yes
fonctionnera même si le shell qui les exécute n'a pas de fonction [
intégrée. Par exemple, dans tcsh
:
> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ] && echo yes
yes
[
intégrée n'est qu'un shell dont les auteurs ont décidé de ne pas en ajouter un.tcsh
ne dispose pas d' un[
builtin par exemple.bash
n'est qu'un des nombreux programmes (shells) conçus pour effectuer des tâches similaires. Bash est l'un des plus populaires, mais de nombreux systèmes sont livrés avec des shells par défaut différents. Certains de ceux plus connus sontsh
,bash
,zsh
,dash
,ksh
,tcsh
,csh
etfish
. Vous pouvez voir ceux disponibles sur votre système aveccat /etc/shells
et une liste partielle ici .sh
est,dash
mais je pensais que le système de sauvetage n'utilisait/bin/sh
pas la boîte occupée. Êtes-vous sûr?Utilisé pour les tests de condition dans les scripts shell. Un autre nom de ce programme est
test
:Cela ressemble à la grammaire du shell mais ne l'est pas. Il
[
s'agit généralement d' un shell intégré, mais probablement comme solution de repli, il existe en tant que commande externe.Voir le bloc "EXPRESSIONS CONDITIONNELLES" dans
man bash
.la source
[
est la même commande quetest
. Sur certains systèmes * nix, l'un n'est qu'un lien vers l'autre. Par exemple, si vous exécutez:vous verrez la même sortie.
La plupart des sh-shells / posix-shells incluent des commandes intégrées
[
et destest
commandes. Il en va de même pourecho
. Il existe à la fois une/bin/echo
commande et une fonction intégrée dans la plupart des obus. C'est la raison pour laquelle parfois vous sentez que, par exemple,echo
ne fonctionne pas de la même manière sur différents systèmes.test
ou[
renvoyer uniquement un code de sortie de0
ou1
. Si le test a réussi, le code de sortie est 0.Vous pouvez également utiliser
[
avecif
:Mais vous pouvez utiliser
if
avec chaque commande,if
pour tester le code de sortie. Par exemple:Ou en utilisant
if
:Vous pouvez obtenir le même résultat en utilisant uniquement la
test
commande pour tester le code de sortie qui est enregistré dans la variablestat
:Vous pouvez également utiliser
[[ ]]
et(( ))
pour les tests, mais ceux-ci ne sont pas identiques à[
ettest
, bien qu'ils aient presque la même syntaxe:Enfin, pour découvrir ce qu'est une commande, vous pouvez utiliser:
la source
cmp /usr/bin/[ /usr/bin/test
ou peut-être des hachagessha256sum /usr/bin/[ /usr/bin/test
mais passtrings
. Sur mon système (openSUSE Tumbleweed) BTW ils ne sont pas les mêmes (pourquoi).