Как связать _список _расширений в редакторе строк Zsh

Пример :Передать в функцию два отдельных массива.

#!/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на вызывающей стороне (, как в С++ ), принимающая сторона объявляет локальную переменную в качестве ссылки.

0
21.04.2020, 10:32
1 ответ

Виджет для списка возможных завершений называется list-choices.

bindkey '\e=' list-choices

Виджет, привязанный к Ctrl+D , по умолчанию — list-choicesв режиме vi и delete-char-or-listв режиме emacs.

Подробнее см. info zsh list-choices.

1
19.03.2021, 02:27

Теги

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