Le manuel de Bash dit:
Lorsque le [formulaire est utilisé, le dernier argument de la commande doit être un].
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Ce ]
n'est donc pas un mot réservé, ni un opérateur, ni une commande intégrée.
En tant que jeton, quel est l'identifiant du jeton ]
? MOT ou NOM?
[
est (également) une commande auto-entretenue: -rwxr-xr-x 1 root root 39552 3 décembre 18:14 / usr / bin / [Bien qu'il soit possible qu'il y ait aussi un "parallèle" intégré, comme il y en a pour par exemplekill
. Sur certains systèmes, latest
commande est un lien symbolique vers[
ou vice versa. AFAIK,]
ne veut rien dire en soi, mais est accepté de "fermer" un[
- mais c'est plus pour une raison "esthétique".[
s'agit (également) d'une commande autonome, elle contient généralement une page de manuel ... Essayez doncman [
et / ouman test
([
et iltest
peut s'agir de la même commande).]
guillemets simples ou doubles et vous verrez que cela ne fait aucune différence; c'est juste une chaîne.Réponses:
]
compléments[
, c'est le signe de fermeture du[
commandement.Comme le souligne la
man
page, il s'agit en fait d'un argument[
, mais[
il arrive de le traiter en particulier, comme la fin.Vous pouvez lui ressembler avec d'autres modèles de fermeture de commande, par exemple
;
dansfind .. exec
.la source
]
?]
n'est pas différent de tout autre caractère normal dans ce contexte (comme argument d'une commande). Latest
commande le traite spécialement, mais cela dépend de la commande.[
déclenche une erreur si son argument final n'est pas exactement égal à]
.Bash ne traite pas les caractères
[
ou]
(à eux seuls) différemment d'une lettre de l'alphabet.Dans ce cas, bash voit un "mot"
[
, et recherche une commande avec ce nom. Si vous regardez dans votre système de fichiers, vous constaterez probablement que/bin/[
(ou/usr/bin/[
) existe en tant que fichier exécutable. En l'occurrence, bash fournit également une version intégrée (pour des raisons d'efficacité), mais ce n'est qu'un détail d'implémentation.La
[
commande (comme dans l'exécutable portant ce nom), a une règle selon laquelle le dernier paramètre que vous lui passez doit être,]
sinon elle génère une erreur. Cela peut être en partie parce que c'est esthétique, mais cela sert également à vous protéger contre les commandes accidentellement tronquées, ce qui est bien.Le fait que ceux-ci ne soient pas spéciaux est la raison pour laquelle vous ne pouvez pas omettre l'espace blanc avant et après le
[
ou]
.Exceptions :
[
et]
se produire dans le format correct dans le même mot, par exemple[a-z]
, alors c'est des règles spéciales et de jokers bash appliquent.[[
commande est spéciale et peut faire beaucoup de choses[
non (et les paramètres à l'intérieur[[ .. ]]
sont traités différemment, tout comme certains sauts de ligne). Le correspondant]]
est également spécial, car il s'agit d'un mot réservé au shell qui ne peut pas être un nom de commande et met fin au traitement spécial qui suit le[[
mot clé.la source
;
ou>
, c'est juste une commande intégrée commecd
. En particulier, si vous tapez[x
, le[
n'a pas de signification particulière.[
est une commande spéciale , ce n'est pas un caractère spécial .]]
c'est plus spécial que]
. Lors de l'utilisation[
et]
ce ne sont que des mots. Si vous l'avez omis]
ou remplacé par un mot différent, bash s'exécutera toujours[
, mais[
produira une erreur. Cependant[[
, ils]]
sont traités spécialement au moment de l'analyse. Si vous avez remplacé]]
par autre chose, bash signalera une erreur de syntaxe. Et si vous omettez]]
bash, continuez d'analyser la ligne suivante à la recherche de]]
.Pour le dire plus simplement que les deux réponses précédentes,
]
c'est juste une chaîne qui[
nécessite de s'exécuter.la source