从linux中的函数中分配局部变量bash一个新值

时间:2014-03-20 08:29:33

标签: 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       
}

如果我想在函数LOCAL中为MYVAR1变量myfunctiona提供一个新值,我是否必须编写

local MYVAR1=$MYVAR1$MYVAR2

或者我也可以写

MYVAR1=$MYVAR1$MYVAR2

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

3 个答案:

答案 0 :(得分:14)

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

#!/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

答案 1 :(得分:1)

正确的方法是:

MYVAR1="${MYVAR1}${MYVAR2}"

通常在连接变量时使用大括号。 Use quotes

由于您在函数范围内重新赋值,因此该变量仍然是本地的。 一个例子:

#!/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

答案 2 :(得分:-1)

你可以这样说,但正如Ube所说的串联,你需要这样做 -

MYVAR1="$MYVAR1$MYVAR2";   

即使这适用于连接