gpt4 book ai didi

bash:函数范围外的变量

转载 作者:行者123 更新时间:2023-11-29 08:59:11 28 4
gpt4 key购买 nike

有没有可能在 bash 中初始化全局变量并在函数中为其赋值,然后在函数范围之外使用它?

函数示例:

globla_var=""

_DBINFO()
{
curl -su $AUTH https://<balla bla >/databases | jq -c 'map(select(.plan.name != "Sandbox")) | .[] | {id, name}'| \
while read db
do
idb=$(echo "$db" | jq -r '.id')
name=$(echo "$db" | jq -r '.name')
if [[ $name = '<bla>' ]]; then
$global_var_her = $(<bla value>)
fi
done
}

然后在函数外使用它:

 echo $global_var

结果

   $0: line 16: =<bla bla>: command not found

我尝试使用 declare:

declare -r global_var

相同的结果

最佳答案

是的,你可以,但你必须小心以意想不到的方式限制范围的子 shell。像你正在做的那样管道到 while read 循环 is a common pitfall .

使用重定向和进程替换代替管道到 while read 循环:

_DBINFO()
{
while read db
do
idb=$(echo "$db" | jq -r '.id')
name=$(echo "$db" | jq -r '.name')
if [[ $name = '<bla>' ]]; then
global_var=value
fi
done < <(curl -su "$AUTH" "https://$host/databases" |
jq -c 'map(select(.plan.name != "Sandbox")) | .[] | {id, name}')
}

AUTH="user:password"
host="example.com"
_DBINFO
echo "The global variable is $global_var"

您还需要确保您的分配在句法上有效。 $var = value 不是有效的 bash 赋值,而 var=value 是。 shellcheck可以指出很多类似的事情。

关于bash:函数范围外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33376904/

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