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

Wol*_*mec 15 bash scope function 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       
}
Run Code Online (Sandbox Code Playgroud)

当我想给函数中的LOCAL变量MYVAR1myfunctiona一个新值时,我是否必须编写

local MYVAR1=$MYVAR1$MYVAR2
Run Code Online (Sandbox Code Playgroud)

或者我也可以写

MYVAR1=$MYVAR1$MYVAR2
Run Code Online (Sandbox Code Playgroud)

如果没有"本地"的第二行,我是否创建了一个具有相同名称的全局变量?

Geo*_*ams 16

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

#!/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
Run Code Online (Sandbox Code Playgroud)

它给出了输出:

one
FOO
global
Run Code Online (Sandbox Code Playgroud)
  • 如您所见,尝试从全局范围访问变量返回null

HTH


Sau*_*ier 6

正确的方法是:

MYVAR1="${MYVAR1}${MYVAR2}"
Run Code Online (Sandbox Code Playgroud)

连接变量时通常使用大括号。使用引号

该变量仍然是本地变量,因为您在函数范围内重新分配了它的值。一个例子:

#!/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}"
Run Code Online (Sandbox Code Playgroud)

这导致:

$ ./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
Run Code Online (Sandbox Code Playgroud)