Bash函数变量在调用之间持续存在

时间:2014-12-08 17:51:34

标签: bash

#!/bin/sh/

function test() {
       echo BEFORE var1 $var1
       echo BEFORE var1 $var1

       var1=$1
       var2=$2

       echo AFTER var1 $var1
       echo AFTER var1 $var1
}

test 1 2
test 3 4

结果:

BEFORE var1
BEFORE var2
AFTER var1 1
AFTER var2 2
BEFORE var1 1
BEFORE var2 2
AFTER var1 3
AFTER var2 4

为什么var1和var2会在第二次调用函数时保留第一次调用函数时的值?如何每次都清除变量?

2 个答案:

答案 0 :(得分:3)

您正在寻找local关键字。

尝试

function test() {
       local var1
       local var2
       echo BEFORE var1 $var1
       echo BEFORE var1 $var1

       var1=$1
       var2=$2

       echo AFTER var1 $var1
       echo AFTER var1 $var1
}

答案 1 :(得分:0)

又一种方法:

test () (
    echo "BEFORE var1 $var1"
    echo "BEFORE var2 $var2"

    var1="$1"
    var2="$2"

    echo "AFTER var1 $var1"
    echo "AFTER var2 $var2"
)

" BEFORE""" BEFORE""" BEFORE"线条,但" AFTER"行将是函数的本地。这是一种全有或全无的方法;你不能在函数创建的子shell中更改全局变量,但这并不需要任何非POSIX功能。