sks*_*174 2 arrays bash declare
arr=("Jane Doe" "John Doe" "Janet")
Run Code Online (Sandbox Code Playgroud)
declare -a arr=("Jane Doe" "John Doe" "Janet")
Run Code Online (Sandbox Code Playgroud)
bash中的两个数组初始化有什么区别?
所提供的两个数组初始化,假设它们实际上是初始化(见下文),如果declare发生在顶层,则意味着完全相同的事情。但是,当declare在函数内部执行时,如果没有-g选项,则相当于local,声明函数的局部变量。另一方面,直接初始化声明一个全局变量,无论它出现在哪里。
example() {
direct=(a b c)
declare -a indirect=(d e f)
#prints a
echo "$direct"
#prints d
echo "$indirect"
}
example
#prints a
echo "$direct"
#prints nothing
echo "$indirect"
Run Code Online (Sandbox Code Playgroud)
当然,local实际上的意图是声明局部变量会更清楚。 declare与其他选项结合使用会更有趣,包括与-a. declare -a -r foo=(1 2 3)例如,考虑一下。
一开始,我提出了一种可能性,即所讨论的一个或两个命令可能不是“初始化”。在这里,我区分了初始化(为以前不存在的变量定义初始值)和赋值(更改已存在的变量的值)。如果我特别小心的话,我会注意到虽然该declare版本包含初始化,但整个命令并没有很好地表征为初始化。
这提出了所讨论的两个命令之间的另一个区别:
declare命令中的初始化仅用作初始化。如果声明的变量已经存在,则通过declare命令指定的任何初始值都将被忽略。