Pour autant que je sache, [[
est une version améliorée de [
, mais je suis confus quand je vois [[
un mot-clé et que je suis [
affiché comme un élément intégré.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP dit
Une commande intégrée peut être un synonyme d'une commande système du même nom, mais Bash la réimplémente en interne. Par exemple, la commande Bash echo n’est pas la même chose que / bin / echo, bien que leur comportement soit presque identique.
et
Un mot clé est un mot, un jeton ou un opérateur réservé. Les mots clés ont une signification particulière pour le shell et sont en fait les éléments constitutifs de la syntaxe du shell. A titre d'exemple, pour, while, do, and! sont des mots-clés. Semblable à une commande intégrée, un mot-clé est codé en dur dans Bash, mais contrairement à une commande intégrée, un mot-clé n'est pas en soi une commande, mais une sous-unité d'une construction de commande. [2]
Cela ne devrait-il pas faire les deux [
et [[
un mot clé? Y a-t-il quelque chose qui me manque ici? En outre, ce lien réaffirme que les deux [
et [[
doivent appartenir au même genre.
if "[" $x -eq 3 ]
fonctionne comme prévu (parce que Bash cherche la commande appelée [
, et cela existe), mais if "[[" $x -eq 3 ]]
ne fonctionne pas (car encore une fois, Bash cherche une commande du nom approprié, mais il n’existe pas [[
commander).
/usr/bin/echo
, mais cela ne signifie pas pour autant que ce n'est pas intégré .