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