#shell #sh
#оболочка #sh
Вопрос:
Я погуглил и ничего не нашел. Я читаю файл сценария оболочки, и там есть эта строка
echo "docker run command"
echo ${command_}
Что это значит? Пожалуйста, обратите внимание, что
- после слова «command» стоит символ подчеркивания
command_
кажется, не определено в другом месте
Комментарии:
1. Какой результат вы видите тогда? после
docker run command
? Должно быть что-то напечатано в стандартный вывод2. ну, я ничего не вижу, указывая, что command_ кажется пустым. Что заставляет меня задуматься, каковы были первоначальные намерения человека, который написал этот сценарий…
3. Может ли это быть ошибкой / опечаткой?
4. Ответ заключается в том, что он просто расширяется до любой пользовательской переменной, которой
command_
назначена, поскольку в этом имени или подчеркивании нет ничего особенного. Что касается того, почему кто-то написал это, возможно, в остальной части сценария есть некоторые подсказки. Например, если несколько переменных имеют завершающий знак подчеркивания, это может быть соглашение для локальных переменных скрипта, которое следует за соглашением C для переменных-членов.
Ответ №1:
Что такое ${command_} в сценарии оболочки
${command_}
означает расширение переменной с именем command_
до ее значения.
Что это значит?
echo "docker run command"
— означает выполнение командыecho
(возможно, встроенной) с одним аргументомdocker run command
.echo ${command_}
— означает выполнение командыecho
(возможно, встроенной), результат расширения переменнойcommand_
будет подвергнут расширению с разделением на слова, а затем результат будет передан в качестве аргументовecho
команде.
после слова «command» стоит символ подчеркивания
Это не имеет значения — подчеркивание не является чем-то особенным.
command_, похоже, не определен в другом месте
Это означает, что ${command_}
расширение расширится до пустой строки, а второе echo
будет выполняться без аргументов.
Ответ №2:
команда echo используется для печати переданных аргументов. Но если аргумент имеет значение $, это означает, что он оценивает его значение и выводит то же самое.
Здесь ваш сценарий оболочки будет иметь переменную с именем «command_». Он просто найдет свое значение, если оно определено, и напечатает его. Если оно не определено, ничего не будет напечатано.