Wol*_*mec 15 bash scope function global-variables
我有一个linux bash带有函数的脚本:
myfunctiona ()
{
local MYVAR1="one"
local MYVAR2="two"
echo $MYVAR1
# The line beneath is the line in question!
local MYVAR1=$MYVAR1$MYVAR2
}
Run Code Online (Sandbox Code Playgroud)
当我想给函数中的LOCAL变量MYVAR1赋myfunctiona一个新值时,我是否必须编写
local MYVAR1=$MYVAR1$MYVAR2
Run Code Online (Sandbox Code Playgroud)
或者我也可以写
MYVAR1=$MYVAR1$MYVAR2
Run Code Online (Sandbox Code Playgroud)
如果没有"本地"的第二行,我是否创建了一个具有相同名称的全局变量?
Geo*_*ams 16
一旦定义了局部变量,就可以正常分配它,如下所示:
#!/bin/bash
myfunctiona ()
{
local MYVAR1="one"
local MYVAR2="two"
echo $MYVAR1
# The line beneath is the line in question!
local MYVAR1=$MYVAR1$MYVAR2
MYVAR1="FOO"
echo $MYVAR1
}
myfunctiona
echo "global" $MYVAR1
Run Code Online (Sandbox Code Playgroud)
它给出了输出:
one
FOO
global
Run Code Online (Sandbox Code Playgroud)
HTH
正确的方法是:
MYVAR1="${MYVAR1}${MYVAR2}"
Run Code Online (Sandbox Code Playgroud)
连接变量时通常使用大括号。使用引号。
该变量仍然是本地变量,因为您在函数范围内重新分配了它的值。一个例子:
#!/usr/bin/env bash
_myFunction()
{
local var_1="one"
local var_2="two"
local -g var_3="three" # The -g switch makes a local variable a global variable
var_4="four" # This will be global since we didn't mark it as a local variable from the start
var_1="${var_1}${var_2}"
echo "Inside function var_1=${var_1}"
echo "Inside function var_2=${var_2}"
echo "Inside function var_3=${var_3}"
echo "Inside function var_4=${var_4}"
}
_myFunction
echo "Outside function var_1=${var_1}"
echo "Outside function var_2=${var_2}"
echo "Outside function var_3=${var_3}"
echo "Outside function var_4=${var_4}"
Run Code Online (Sandbox Code Playgroud)
这导致:
$ ./script
Inside function var_1=onetwo
Inside function var_2=two
Inside function var_3=three
Inside function var_4=four
Outside function var_1=
Outside function var_2=
Outside function var_3=three
Outside function var_4=four
Run Code Online (Sandbox Code Playgroud)