Bash 局部a与局部a的区别=

Bash 局部a与局部a的区别=,bash,Bash,来自/lib/lsb/init函数(这个文件可能是特定于debian的,但对这个问题来说并不重要): 说什么有什么区别 local a 及 ?这两种类型都从范围中删除变量的任何外部版本。 =为变量指定一个空值,而裸表单则不设置变量 例如: A=30 B=30 function foo() { local A B= echo A - $A echo B - $B echo A :- ${A:-minusA} echo B :- ${B:-minusB}

来自/lib/lsb/init函数(这个文件可能是特定于debian的,但对这个问题来说并不重要):

说什么有什么区别

local a


这两种类型都从范围中删除变量的任何外部版本。
=
为变量指定一个空值,而裸表单则不设置变量

例如:

A=30
B=30

function foo()
{
    local A B=
    echo A - $A
    echo B - $B
    echo A :- ${A:-minusA}
    echo B :- ${B:-minusB}
    echo A :+ ${A:+plusA}
    echo B :+ ${B:+plusB}
    echo A hash ${#A}
    echo B hash ${#B}


    echo A - ${A-minusA}
    echo B - ${B-minusB}
    echo A + ${A+plusA}
    echo B + ${B+plusB}


    ## Modifies variable
    echo A := ${A:=eqA}
    echo B := ${B:=eqB}
    echo A - $A
    echo B - $B
}

foo
输出:

A -
B -
A :- minusA
B :- minusB
A :+
B :+
A hash 0
B hash 0
A - minusA
B -
A +
B + plusB
A := eqA
B := eqB
A - eqA
B - eqB
您可以看到以下部分:

    echo A - ${A-minusA}
    echo B - ${B-minusB}
    echo A + ${A+plusA}
    echo B + ${B+plusB}
A和B是不同的

A -
B -
A :- minusA
B :- minusB
A :+
B :+
A hash 0
B hash 0
A - minusA
B -
A +
B + plusB
A := eqA
B := eqB
A - eqA
B - eqB
    echo A - ${A-minusA}
    echo B - ${B-minusB}
    echo A + ${A+plusA}
    echo B + ${B+plusB}