Насколько я знаю, [[
это расширенная версия [
, но я смущен, когда вижу [[
в качестве ключевого слова и [
отображается как встроенный.
[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
, но это не значит, что это не встроенная функция .