LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

результат выполнения функции можно вернуть либо через поток вывода, либо через глобальные переменные, либо через то и другое.

Результат работы функции - целая переменная в $? . Всё остальное - соглашение внутри самой программы, ибо количество изменяемых переменных в отличии от паскаля в shell определяется и соглашениями и в основном качеством кода :) А вот передача результатов через echo+read - объяснено ранее.

сколько проходов BASH делает для обычной интерпретации и сколько - для eval.

По сравнению с fork+write+read ? Да на много порядков меньше.

Да, и ещё расскажите мне, несведущему, как бы это так передать в eval код, в котором есть двойные и одинарные кавычки? Я имею в виду - код, не сформированный где-то сбоку заранее? ;)

Да пожалуйста, заодно ответ на bash - выполнить аргумент и вставить в выданную переменную (комментарий) для PPP328:

#!/bin/bash
declare -a var

foo() {
        eval local -a __rezult=(\${$1[@]})
        local i r

        for ((i=0;i<${#__rezult};i++)); do
#                echo "${__rezult[i]}"
                r="${__rezult[i]}+$2"
                eval $1[i]=\$r
        done
}

var=(value1\" value2\')
foo var xxx\"\'zzz
echo ${var[0]} ${var[1]}
value1"+xxx"'zzz value2'+xxx"'zzz

Исходная версия vodz, :

результат выполнения функции можно вернуть либо через поток вывода, либо через глобальные переменные, либо через то и другое.

Результат работы функции - целая переменная в $? . Всё остальное - соглашение внутри самой программы, ибо количество изменяемых переменных в отличии от паскаля в shell определяется и соглашениями и в основном качеством кода :) А вот передача результатов через echo+read - объяснено ранее.

Да, и ещё расскажите мне, несведущему, как бы это так передать в eval код, в котором есть двойные и одинарные кавычки? Я имею в виду - код, не сформированный где-то сбоку заранее? ;)

Да пожалуйста, заодно ответ на bash - выполнить аргумент и вставить в выданную переменную (комментарий) для PPP328:

#!/bin/bash
declare -a var

foo() {
        eval local -a __rezult=(\${$1[@]})
        local i r

        for ((i=0;i<${#__rezult};i++)); do
#                echo "${__rezult[i]}"
                r="${__rezult[i]}+$2"
                eval $1[i]=\$r
        done
}

var=(value1\" value2\')
foo var xxx\"\'zzz
echo ${var[0]} ${var[1]}
value1"+xxx"'zzz value2'+xxx"'zzz