#!/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会在第二次调用函数时保留第一次调用函数时的值?如何每次都清除变量?
答案 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功能。