在LinuxBash中为函数中的局部变量指定一个新值

在LinuxBash中为函数中的局部变量指定一个新值,bash,function,scope,global-variables,Bash,Function,Scope,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 } 当我想给函数myfunction中的LOCAL变量MYVAR1一个新值时,我必须写吗 local MYVAR1=$MYVAR1$MY

我有一个带有函数的
linux bash
脚本:

myfunctiona () 
{
  local MYVAR1="one"
  local MYVAR2="two"
  echo $MYVAR1
  # The line beneath is the line in question!
  local MYVAR1=$MYVAR1$MYVAR2       
}
当我想给函数
myfunction
中的
LOCAL
变量
MYVAR1
一个新值时,我必须写吗

local MYVAR1=$MYVAR1$MYVAR2
或者我也可以写

MYVAR1=$MYVAR1$MYVAR2

如果第二行没有“local”,我是否要创建一个同名的全局变量?

正确的方法是:

MYVAR1="${MYVAR1}${MYVAR2}"
大括号通常用于连接变量

变量仍然是局部变量,因为您在函数范围内重新分配了它的值。 例如:

#!/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}"
这导致:

$ ./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

您可以这样给出,但正如Ube所说,对于串联,您需要这样给出-

MYVAR1="$MYVAR1$MYVAR2";   

即使这也适用于串联

一旦定义了局部变量,您可以正常分配它,如下所示:

#!/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
它给出了输出:

one
FOO
global
  • 如您所见,尝试从全局范围访问变量返回null

HTH

您必须给出
MYVAR1=“$MYVAR1$MYVAR2”为什么不用echo:-)试试呢?POSIX方式:你是在问当地和全球的状况吗