1

Что означает "var = $ {str = expr}" в оболочке linux? Кто может объяснить это специально для меня?

2 ответа2

4

Смотрите "Расширение параметров" в man bash:

${parameter:=word} Назначить значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова присваивается параметру. Значение параметра затем подставляется. Позиционные параметры и специальные параметры не могут быть назначены таким образом.

Толстая кишка объясняется выше:

Когда не выполняется раскрытие подстроки, используя формы, описанные ниже, bash тестирует параметр, который не установлен или имеет значение null. Пропуск двоеточия приводит к проверке только для неустановленного параметра.

Доказательства:

var=${str=expr}
echo $var
echo $str

Выход:

expr
expr
-3

В 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .