Что означает "var = $ {str = expr}" в оболочке linux? Кто может объяснить это специально для меня?
2 ответа
Смотрите "Расширение параметров" в man bash
:
${parameter:=word}
Назначить значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова присваивается параметру. Значение параметра затем подставляется. Позиционные параметры и специальные параметры не могут быть назначены таким образом.
Толстая кишка объясняется выше:
Когда не выполняется раскрытие подстроки, используя формы, описанные ниже, bash тестирует параметр, который не установлен или имеет значение null. Пропуск двоеточия приводит к проверке только для неустановленного параметра.
Доказательства:
var=${str=expr}
echo $var
echo $str
Выход:
expr
expr
В bash вы можете использовать $() для запуска задачи в подоболочке.
Пример:
#!/usr/bin/env bash
foo=${ls}
echo $foo
Этот скрипт заполнит переменную $ foo результатом ls
.
(и echo $foo
покажет вам содержимое).
Теперь к вашему более конкретному вопросу. Я также не знал результата, поэтому я протестировал его, предполагая, что под «оболочкой linux» вы подразумеваете bash, который является оболочкой по умолчанию в моих дистрибутивах linux.
Я создал следующий файл:
#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo
и запустил его:
> ./test t
test 1 2 3
Похоже, что значение присваивается переменной (или в вашем выражении) переменной и возвращает это значение родительскому сценарию.
Подведем итог:
- Новая оболочка будет запущена
- Эта новая оболочка выполнит команду
str=expr
- Родительская оболочка получит результат в качестве вывода.
- Родительская оболочка хранит этот результат в $ var.