assign local variable from function in linux bash a new value

。_饼干妹妹 提交于 2019-12-22 01:44:54

问题


I have a linux bash script with a function:

myfunctiona () 
{
  local MYVAR1="one"
  local MYVAR2="two"
  echo $MYVAR1
  # The line beneath is the line in question!
  local MYVAR1=$MYVAR1$MYVAR2       
}

When I want to give the LOCAL variable MYVAR1 in the function myfunctiona a new value, do I have to write

local MYVAR1=$MYVAR1$MYVAR2

or can I also write

MYVAR1=$MYVAR1$MYVAR2

With the second line without "local" do I create a global variable with the same name?


回答1:


Once you've defined a local variable you can assign it normally, like this:

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

which gives the output:

one
FOO
global
  • As you can see attempting to access the variable from global scope returns null

HTH




回答2:


The correct way to do it would be:

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

The braces are usually used when you concatenate variables. Use quotes.

The variable is still local since you reassigned its value within the scope of the function. An example:

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

This results in:

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



回答3:


You can give this way, but as Ube said for concatenation you need to give like that -

MYVAR1="$MYVAR1$MYVAR2";   

Even this works for concatenation



来源:https://stackoverflow.com/questions/22527325/assign-local-variable-from-function-in-linux-bash-a-new-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!