Назначить локальную переменную из функции в linux bash новое значение
У меня есть linux bash
script с функцией:
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" я создаю глобальную переменную с тем же именем?
Ответы
Ответ 1
Как только вы определили локальную переменную, вы можете назначить ее как обычно:
#!/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
НТН
Ответ 2
Правильный способ сделать это:
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
Ответ 3
Вы можете дать этот путь, но, как сказал Ube для конкатенации, вам нужно дать так:
MYVAR1="$MYVAR1$MYVAR2";
Даже это работает для конкатенации