明らかに、より複雑で意味のあるスクリプトが削除されました。
#!/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は、2番目のステートメントでreturn関数を自動的に実行するようです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
私が見つけたこのスレッドは[Eメール保護]関連配列に関連付けられていますtest -v
。簡単に言えば、bashはtest -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"