gpt4 book ai didi

bash - 编辑全局变量并返回它(或静态变量)

转载 作者:行者123 更新时间:2023-12-04 08:54:17 24 4
gpt4 key购买 nike

我需要能够修改全局(或静态函数)变量的字符串并同时返回它。
我在网上找不到我要找的东西...

为了使问题更清楚,在 Python3 中将是这样的:

def get_static_variable():
if 'val' not in get_static_variable.__dict__:
# Some other code...
print('Some other code test') # Prints one time
get_static_variable.val = "Hello World!"
return get_static_variable.val

print('FUN: ' + get_static_variable())
print('FUN: ' + get_static_variable())

这工作正常......
Some other code test
FUN: Hello World!
FUN: Hello World!

在 bash 我尝试过这样的事情:
#!/usr/bin/env bash

GLOBAL_VAR=""

function get_global_var(){
if [ -z "$GLOBAL_VAR" ]; then
# Some other code...
GLOBAL_VAR="Hello World!"
fi
echo $GLOBAL_VAR
}

echo "FUN: $(get_global_var)"
echo "VAR: ${GLOBAL_VAR}"
但正如你想象的那样,它不起作用......
FUN: Hello World!
VAR: *empty*

最佳答案

变量始终是全局的,无论您首先在何处为其赋值,除非明确声明为 local .
我相信这里的问题是 $(get_global_var)产生一个子 shell ,因此值“Hello World!”仅在此子 shell 中分配,而从不在调用 shell 中分配。
这将起作用:

GLOBAL_VAR=""

function get_global_var(){
[ -z "$GLOBAL_VAR" ] && GLOBAL_VAR="Hello World!"
echo $GLOBAL_VAR
}

get_global_var
echo "VAR: ${GLOBAL_VAR}"
这当然也有效,我认为它应该是你的首选(不要依赖全局赋值,只依赖返回值):
# as the name says, only "get" the value, don't "set" it
function get_global_var(){
if [ -z "$GLOBAL_VAR" ]; then
echo "Hello World!"
else
echo "whatever else"
fi
}

GLOBAL_VAR=$(get_global_var)
echo "VAR: ${GLOBAL_VAR}"
更好的是(除非绝对必要,否则我非常不喜欢全局变量),使其功能齐全:
function get_var() {
if [ -z "$1" ]; then
echo "Hello World!"
else
echo "whatever else"
fi
}

GLOBAL_VAR=$(get_var ${GLOBAL_VAR})
echo "VAR: ${GLOBAL_VAR}"

关于bash - 编辑全局变量并返回它(或静态变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63919630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com