有没有办法在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
}
Run Code Online (Sandbox Code Playgroud)
然后在函数外使用它:
echo $global_var
Run Code Online (Sandbox Code Playgroud)
结果
$0: line 16: =<bla bla>: command not found
Run Code Online (Sandbox Code Playgroud)
我尝试使用declare:
declare -r global_var
Run Code Online (Sandbox Code Playgroud)
相同的结果
是的,你可以,但你必须小心以不正常的方式限制范围的子壳.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"
Run Code Online (Sandbox Code Playgroud)
您还需要确保您的作业在语法上有效.$var = value
不是有效的bash赋值,var=value
而是.shellcheck可以指出很多类似的东西.
归档时间: |
|
查看次数: |
8858 次 |
最近记录: |