Невозможно получить доступ к переменной внутри функции - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть код ниже, где функция copy_from_tar не может получить доступ к переменным, определенным вне программы.copy_from_tar не повторяет $file или ${id_from_doc[@]}, но после входа в функцию показывает пустой вывод.

Я ищу доступ к $file и $id_from_doc и определяется внешней функцией.Если у кого-то есть предложения по решению этой проблемы, пожалуйста, дайте мне знать.

id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
echo 'entered func'
echo ${id_from_doc[@]}
echo $file
}

export -f copy_from_tar
echo 'sample' | xargs -I % bash -c 'copy_from_tar %'

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Упростите свою логику.Исключите явный субколл до bash, если только для этого нет веской причины, которого вы здесь не перечислили, и перепишите свою функцию для обработки итераций внутри нее.

export id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
    echo 'entered func'
    echo "${id_from_doc[@]}"
    echo $file

    for f in "${id_from_doc[@]}" # or whatever you really wanted
    do  : whatever logic was going to be here - e.g.
        foo-program "$f" "$file" > "$f.ext"
    done
}

И, если возможно (это практически всегда возможно), используйте передачу аргументов вместо глобальных.

0 голосов
/ 06 декабря 2018

Экспорт переменных также.Или (лучший способ) используйте цикл while следующим образом:

id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
    echo 'entered func'
    echo "${id_from_doc[@]}"
    echo $file
}

echo 'sample' | while read f
do
    copy_from_tar "$f"
done
...