можно ли отправить ввод в сеанс tmux без подключения к нему?

В Bash FAQ есть целая запись о вызове по ссылке / косвенному обращению .

В простом случае - лучшая альтернатива eval , предложенная другими ответами, что значительно упрощает цитирование .

func() {  # set the caller's simple non-array variable
    local retvar=$1
    printf -v "$retvar"  '%s ' "${@:2}"  # concat all the remaining args
}

Завершение Bash (код, который запускается при нажатии клавиши табуляции) переключился на printf -v вместо eval для своих внутренних функций, потому что он более читабелен. и наверное быстрее.

Для возврата массивов в Bash FAQ предлагается использовать read -a для чтения в последовательные индексы массива переменной массива:

# Bash
aref=realarray
IFS=' ' read -d '' -ra "$aref" <<<'words go into array elements'

Bash 4.3 представил функцию, которая делает call- по ссылке в разы удобнее. Bash 4.3 все еще нова (2014).

func () { # return an array in a var named by the caller
    typeset -n ref1=$1   # ref1 is a nameref variable.
    shift   # remove the var name from the positional parameters
    echo "${!ref1} = $ref1"  # prints the name and contents of the real variable
    ref1=( "foo" "bar" "$@" )  # sets the caller's variable.
}

Обратите внимание, что формулировка страницы руководства bash немного сбивает с толку. В нем говорится, что атрибут -n нельзя применять к переменным массива. Это означает, что у вас не может быть массива ссылок, но вы можете иметь ссылку на массив.

6
09.12.2017, 05:34
0 ответов

Теги

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