30

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?

2

3 Answers 3

36

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

Sign up to request clarification or add additional context in comments.

Comments

7

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

Comments

-1

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

1 Comment

Are you asking about the local and global status

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.