Hasta donde yo sé, [[
es una versión mejorada de [
, pero estoy confundido cuando lo veo [[
como una palabra clave y [
se muestra como incorporado.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP dice
Un incorporado puede ser sinónimo de un comando del sistema con el mismo nombre, pero Bash lo reimplementa internamente. Por ejemplo, el comando Bash echo no es lo mismo que / bin / echo, aunque su comportamiento es casi idéntico.
y
Una palabra clave es una palabra reservada, token u operador. Las palabras clave tienen un significado especial para el shell, y de hecho son los componentes básicos de la sintaxis del shell. Como ejemplos, para, while, do y! son palabras clave De forma similar a un builtin, una palabra clave está codificada en Bash, pero a diferencia de un builtin, una palabra clave no es en sí misma un comando, sino una subunidad de una construcción de comando. [2]
¿No debería eso hacer ambos [
y [[
una palabra clave? ¿Hay algo que me falta aquí? Además, este enlace reafirma que ambos [
y [[
deben pertenecer al mismo tipo.
if "[" $x -eq 3 ]
funciona como se espera (porque Bash busca el comando llamado [
, y esto existe), pero if "[[" $x -eq 3 ]]
no no funciona (porque una vez más Bash busca de un comando del nombre apropiado, pero no hay [[
mando).
/usr/bin/echo
, pero eso no significa que no sea una construcción .