Как вызвать переменную вне функции в Bash? - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в bash и awk, у меня есть такой код:

i=0
while [ $i -lt 10 ] ; 
do

    tes1() {
        set_from=$i;
        if [ -z "${set_from}" ]; then set_from=1; fi
             awk '
             {
                time=$1;
                from=$3;
                to=$4;
                status=$5;
                set_from = set_from_set;
                set_to = 10;

                if (from == set_from && to == set_to){
                print time, from, to, status;
            }
        }'  set_from_set="$set_from" tes.txt;

    }



done

Я не знаю, чтобы получить $ i с первой строки, может быть, кто-нибудь здесьзнает, как получить это $ i для функции tes1 ()?Thankyou ...

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Я догадываюсь вы на самом деле ищете что-то вроде

for ((i=1; i<=10; i++)); do
     awk -v set_from_set="$i" '{
            time=$1;
            from=$3;
            to=$4;
            status=$5;
            set_from = set_from_set;
            set_to = 10;

            if (from == set_from && to == set_to){
            print time, from, to, status;
        }
    }' tes.txt
done

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

Возможно, скрипт Awk можно было бы реорганизовать для выполнения цикла в каждой строке ввода, но не зная, как выглядят ваши данные, неизвестно, будет ли это улучшением.Если файл данных большой, возможно, попытайтесь обработать его только один раз.

Если ваш фактический вопрос «как передать параметр в функцию», то это будет

fun () { printf "Hello, I got called with %s\n" "$1" }

fun 1
fun 2

илив целом

funtoo () {
    printf "All my arguments:\n"
    printf "%s\n" "$@"
}

funtoo one "two 2" 'three 3' four\ 4
0 голосов
/ 15 февраля 2019

Самый простой способ - вставить его в качестве аргумента функции:

tes0 "$1"

Таким образом, вы передаете первый аргумент скрипта в функцию в качестве первого аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...