Что лучше: использовать namerefs или косвенное расширение для передачи массивов между функциями? - PullRequest
0 голосов
/ 13 июля 2020

Я передаю несколько массивов между функциями и хотел бы знать, лучше ли объявить nameref (введено в bash 4.3) или использовать косвенное расширение. Стилистически я предпочитаю использовать namerefs, поскольку я могу манипулировать локальным массивом так же, как и исходным, плюс, AFAIK, невозможно добавить к ассоциативному массиву с помощью косвенного расширения . Есть ли какие-либо недостатки в использовании nameref, кроме минимального bash ограничения версии?

Примеры

Nameref:

#!/usr/bin/env bash
unset arr
declare -Ag arr['lock']='key'
arr['door']='window'
f(){
  unset my_arr
  declare -n my_arr="$1"
  my_arr['pants']='shirt'
  echo "${my_arr['door']}"
  echo "${my_arr['lock']}"
}
$ f arr
window
key
$ echo "${arr['pants']}"
shirt

Косвенное расширение:

#!/usr/bin/env bash
unset arr
declare -Ag arr['lock']='key'
arr['door']='window'
f(){
  arr_door=$1['door']
  arr_lock=$1['lock']
  echo "${!arr_door}"
  echo "${!arr_lock}"
}
$ f arr
window
key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...