bash 在(重新)声明全局关联只读数组时默默地返回函数

bash 在(重新)声明全局关联只读数组时默默地返回函数

显然,删除了一个更复杂、更有意义的脚本:

#!/bin/bash

function InitializeConfig(){
    declare -r -g -A SHCFG_INIT=( [a]=b )
    declare -r -g -A SHCFG_INIT=( [c]=d )
    echo "This statement never gets executed"
}

set -o xtrace

InitializeConfig
echo "Back from function"

输出如下所示:

ronburk@ubuntu:~/ubucfg$ bash bug.sh
+ InitializeConfig
+ SHCFG_INIT=([a]=b)
+ declare -r -g -A SHCFG_INIT
+ SHCFG_INIT=([c]=d)
+ echo 'Back from function'
Back from function

Bash 似乎在第二条语句上默默地执行函数返回declare。开始认为这确实是一个新错误,但很高兴了解其他情况。

其他详情:

Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gn$
uname output: Linux ubuntu 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Lin$
Machine Type: x86_64-pc-linux-gnu

Bash Version: 4.3
Patch Level: 11
Release Status: release

答案1

我发现这个线程在[电子邮件受保护]与关联数组相关test -v。简而言之,bashtest -v SHCFG_INIT[0]在您的脚本中隐式地执行了此操作。我不确定此行为是否在 4.3 中引入。

您可能想用它declare -p来解决这个问题...

if ! declare -p SHCFG_INIT >/dev/null 2>&1; then
    echo "looks like SHCFG_INIT not defined"

相关内容