有没有办法在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 -r global_var
相同的结果
是的,可以,但是您必须小心子外壳,这些子外壳会以意想不到的方式限制范围。while read
像您正在做的那样循环到一个循环是一个常见的陷阱。
不用管道传递到while读取循环,而是使用重定向和进程替换:
_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可以指出很多类似的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句