Per quanto ne so, [[
è una versione migliorata di [
, ma sono confuso quando vedo [[
come parola chiave e [
viene mostrato come incorporato.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
Dice TLDP
Un builtin può essere sinonimo di un comando di sistema con lo stesso nome, ma Bash lo reimplementa internamente. Ad esempio, il comando Bash echo non è lo stesso di / bin / echo, sebbene il loro comportamento sia quasi identico.
e
Una parola chiave è una parola, un token o un operatore riservato. Le parole chiave hanno un significato speciale per la shell, e in effetti sono i mattoni della sintassi della shell. Ad esempio, per, while, do e! sono parole chiave. Simile a un builtin, una parola chiave è codificata in Bash, ma a differenza di un builtin, una parola chiave non è di per sé un comando, ma una subunità di un costrutto di comando. [2]
Questo non dovrebbe rendere entrambi [
e [[
una parola chiave? C'è qualcosa che mi manca qui? Inoltre, questo link ri-afferma che sia [
e [[
dovrebbe appartenere allo stesso genere.
if "[" $x -eq 3 ]
funziona come previsto (perché Bash cerca il comando chiamato [
, e questo esiste), ma if "[[" $x -eq 3 ]]
non non funziona (perché ancora una volta Bash cerca un comando del nome appropriato, ma non c'è [[
comando).
/usr/bin/echo
, ma ciò non significa che non sia incorporato .