Что означает «var=${str=expr}» в оболочке Linux?

Что означает «var=${str=expr}» в оболочке Linux?

Что означает "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.

Связанный контент