Наскільки я знаю, [[
це вдосконалена версія [
, але я плутаюся, коли бачу [[
це ключове слово і [
показують як вбудований.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP каже
Вбудований може бути синонімом до однойменної системної команди, але Bash повторно реалізує її. Наприклад, команда Bash echo не є такою ж, як / bin / echo, хоча їх поведінка майже однакова.
і
Ключове слово - це зарезервоване слово, маркер або оператор. Ключові слова мають особливе значення для оболонки, і справді є будівельними блоками синтаксису оболонки. Як приклад, для, в той час, як, і! - це ключові слова. Подібно до вбудованого, ключове слово важко кодується в Bash, але на відміну від вбудованого, ключове слово не є саме по собі командою, а підрозділом конструктивної команди. [2]
Чи не повинно це робити [
і [[
ключове слово, і Чи є щось, чого мені тут не вистачає? Також це посилання ще раз підтверджує, що обидва [
і [[
повинні належати до одного виду.
if "[" $x -eq 3 ]
працює , як очікувалося (оскільки Bash виглядає для команди під назвою [
, і це є), але if "[[" $x -eq 3 ]]
нічого НЕ працює (бо ще раз Bash шукає команду відповідного імені, але немає [[
команда).
/usr/bin/echo
, але це не означає, що це не вбудований .