«слова», которые существуют внутри теста ( [[
и ]]
или [
и ]
) после разделения на пробелы становятся первичными. Слова могут быть (!
), ( -f
) или значениями ( $ var
). Такие слова также являются «аргументами», если первое [
или [[
] понимается как команда («тест»).
После разделения, (некоторые) два слова вместе. Подобные (-f) и ($ var) называются «унарными первичными цветами». И (некоторые) три слова называются «двоичными первичными».
Но это описание не так точно в некоторых случаях использования и немного отклоняется.
Концепция довольно старая (из оболочки Bourne) и подробно описана в спецификации POSIX (в качестве примера) :
ОПЕРАНДЫ
Приложение должно гарантировать, что все операторы и элементы основных параметров представлены тестовой утилите как отдельные аргументы .
Для построения выражения можно использовать следующие основные параметры:
Were выражение означает то, что находится внутри фигурных скобок: [выражение]
.
Обратите внимание, что здесь операторы операндов и означают аргументы (слова, разделенные пробелами), передаваемые тестовой утилите.
Концепция выражения также используется в man bash
, например, рядом с началом поиска [[выражение]]
(одна из форм «составных команд») :
Выражения состоят из основных , описанных ниже в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ.
Условные операторы, такие как -f, должны быть без кавычек, чтобы их можно было распознать как основные.
И, наконец, вы можете выполнить поиск на странице спецификации POSIX, указанной выше и снова здесь , для этой строки (и следующих строк):
Основные параметры с двумя элементами формы:
-primary_operator primary_operand
известны как унарные основные параметры .
В следующих строках предпринимается попытка определения первичных чисел с помощью выражений, имеющих до 4 аргументов (слова, разделенные пробелами, с чего я начал).
Нет четырех основных слов (если !
не считается частью (инвертированных) трех основных слов).
Это описание POSIX не работает во многих случаях и является основной причиной разработки встроенного [[]]
.
Если контролируемый ресурс вовсе не является обычным файлом , то вы не можете использовать существование этого обычного файла в качестве собственного файла блокировки; тогда вам нужно будет создать отдельный файл для блокировки.