Пример :Передать в функцию два отдельных массива.
#!/bin/bash
foo () {
declare -n array1="$1"
declare -n array2="$2"
echo 'The 1st array:'
printf '\t%s\n' "${array1[@]}"
echo 'The 2nd array:'
printf '\t%s\n' "${array2[@]}"
}
a=( 1 2 3 )
b=( a b c )
foo a b
Тестирование:
$ bash script.sh
The 1st array:
1
2
3
The 2nd array:
a
b
c
Выполнить то же самое без использования переменных-ссылок на имена было бы сложно и, вероятно, потребовало бы либо изменения функции так, чтобы она всегда обрабатывала только один массив при каждом вызове, либо того, чтобы она принимала количество элементов в каждом из двух массивов как дополнительные аргументы или использовать eval
каким-то образом (, что трудно сделать правильно ).
При использовании в функции именных опорных переменных не требуется тайный синтаксис для использования данных в массивах, переданных (в качестве имен )в функцию, и функция может использовать именные опорные переменные. как обычные массивы.
В функции две переменные array1
и array2
ссылаются, т. е. могут использоваться как переменные, переданные по имени в $1
и $2
. Это ссылки на имена .
Это похоже на «вызов по ссылке», например, в. С++, я думаю, но вместо использования &variable
на вызывающей стороне (, как в С++ ), принимающая сторона объявляет локальную переменную в качестве ссылки.
Виджет для списка возможных завершений называется list-choices
.
bindkey '\e=' list-choices
Виджет, привязанный к Ctrl+D , по умолчанию — list-choices
в режиме vi и delete-char-or-list
в режиме emacs
.
Подробнее см. info zsh list-choices
.