Возврат локальных значений из переменных Bash?

Откройте сеанс tmux и запустите первую команду. Затем запустите больше команд в новых окнах и равномерно распределите размеры окон в конце.

tmux \
  new-session  "command1 ; read" \; \
  split-window "command2 ; read" \; \
  split-window "command3 ; read" \; \
  split-window "command4 ; read" \; \
  select-layout even-vertical

чтение после каждой команды заставляет окно оставаться открытым после завершения команды, чтобы вы могли прочитать вывод.

0
12.09.2015, 01:55
1 ответ

Вы можете использовать простую функцию для удаленияlocal-ness из переменной через unset+set:

function return_local()
{
  unset $1 # must be local
  eval "$1=\"\$2\""
}

Мы должны использовать evalвместо declare, потому что он создает либо локальную, либо экспортируемую переменную, когда нам нужно создать не локальную не экспортируемую переменную.

function test()
{
  local my_return_value=123
  #...
  return_local my_return_value "$my_return_value"
}

Инструкция unsetудаляет самую внутреннюю localпеременную, поэтому вам нужно писать return_localв каждой функции, которая хочет вернуть локальную переменную. Таким образом, return_localможно использовать в контекстах вложенных вызовов.

И нет необходимости использовать оператор $(...), пока он создает отдельный процесс, который стоит производительности в bash под Windows, потому что создание процесса там недешево.

0
28.01.2020, 02:27

Теги

Похожие вопросы