Я не могу найти никаких ссылок на x $ feature ... с помощью Google поскольку он покажет мне примеры grub.cfg.
В самогенерируемом файле grub.cfg много
if [ x$feature_platform_search_hint = xy ] ...
if [ x$feature_default_font_path = xy]...
if [ x$feature_all_video_module = xy ]...
Насколько я понимаю, он проверяет, присутствует ли функция. Где я могу найти каждую доступную функцию с описанием.
Я предполагаю, что «ху» означает что-то вроде истинного или доступного. Какие еще значения у вас могут быть?
Изменить: мне нужно знать только переменные, доступные в grub.cfg. Желательно документацию.
Синтаксис описан в руководство GRUB как "синтаксис, весьма схожий с тем из Bash GNU и других производных Оболочки Bourne". Заключение в кавычки и переменная работа расширения, подобная как в оболочке. Открывающая скобка" [
" является синонимом для GRUB , тестируют встроенную команду .
, список функций ведется как features
глобальная переменная в normal/main.c
. feature_platform_search_hint
было доступно начиная с GRUB 2.00 (выпущенный 2012). Таким образом, условная проверка кода эту функцию бессмысленна во всех современных дистрибутивах Linux.
Во время этой записи, последняя добавленная опция была feature_timeout_style
, доступна с тех пор 2.02-beta1.
Строго говоря, мудрое выражение, if [ x$feature_platform_search_hint = xy ]
не имеет никакого отношения grub
, это - выражение оболочки, чтобы быть интерпретированным оболочкой. grub
использует его в одном из, его - сценарий помощника, вот именно.
if [ x$feature_platform_search_hint = xy ]
в основном тестирует если переменная feature_platform_search_hint
расширен до y
.
Как?
[
синоним для команды test
(может быть встроенная оболочка или внешняя команда), используемый для оценки выражений.
В if [ x$feature_platform_search_hint = xy ]
:
[
тестирует ли строки x$feature_platform_search_hint
и xy
то же
здесь x
заполнитель, фиктивная строка, существует с обеих сторон
переменная $feature_platform_search_hint
расширен сначала, значение добавляется к уже существующей строке x
, и затем строка на левом сравнивается со строкой справа от =
В действительности это обязательно проверяет если переменная feature_platform_search_hint
имеет значение y
Здесь x
используется так, чтобы если переменная feature_platform_search_hint
сброшен или пустой указатель, затем [
выйдет с ошибкой как =
требует аргумента и на стороне, и без feature_platform_search_hint
, это станет:
if [ = y ]
использование x
получает нас, синтаксически исправляют использование в этом случае:
if [ x = xy ]
Обратите внимание, что, нужно вместо этого использовать -z
тест (который тестирует, если строка имеет нулевую длину), или -n
тест (ненулевой тест длины), какой бы ни подходит лучше всего:
if [ -n "$feature_platform_search_hint" ]
if [ -z "$feature_platform_search_hint" ]
Нужно также заключить переменные в кавычки (хотя строго не необходимый в этом случае, поскольку, по-видимому, автор намеревался определить/перезаписать переменную только в сценарии):
if [ x"$feature_platform_search_hint" = xy ]
feature_platform_search_hint
(и другие), и подобный оболочке синтаксис функция normal
модуль в grub
. Синтаксис несколько документируется в руководство GRUB - хотя я не мог найти документацию для []
Язык сценария, "очевидно", смоделирован после удара, поскольку он резервирует слова, используемые в ударе даже если еще реализованный (такой как [[
) и реализации bashisms такой как function
.
Предварительно определенные переменные такой как feature_platform_search_hint
hardcoded в нормальном модуле во время изготовления и чрезвычайно не документирован кроме путем изучения исходного кода. В текущих версиях grub
, эти переменные определяются, чтобы быть y
в любом случае, таким образом, эти переменные, кажется, указывают на поддержку определенных функций данной версии личинки, и тестирование их может быть сделано для записи grub.cfg
файлы, которые работают с несколькими версиями личинки.
Например, feature_platform_search_hint=y
кажется, указывает, что поисковая команда поддерживает --hint-bios
, --hint-efi
и так далее переключатели, в то время как отсутствие этой переменной могло бы указать на версию grub
это не поддерживает эти переключатели, таким образом, Вы не должны пытаться выполнить a search
оператор с помощью них для предотвращения синтаксических ошибок.
Существует много догадки, и "может" в моем ответе, поскольку все это, кажется, чрезвычайно не документировано.