如何在bash中的函数外部调用变量?

时间:2019-02-15 10:38:25

标签: bash shell awk

我是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 ,也许这里有人知道如何为函数tes1()获取该 $ i ?谢谢...

2 个答案:

答案 0 :(得分:1)

最简单的方法是将其作为函数的参数:

tes0 "$1"

通过这种方式,您可以将提供给脚本的第一个参数也作为第一个参数传递给函数。

答案 1 :(得分:0)

我正在猜测您实际上正在寻找类似的东西

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