%EC%84%A0%EC%96%B8%ED%95%A0%20%EB%95%8C%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%ED%95%A8%EC%88%98%EB%A5%BC%20%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
분명히 더 복잡하고 의미 있는 스크립트가 제거되었습니다.
#!/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는 두 번째 명령문에서 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
내가 찾은이 스레드는[이메일 보호됨]연관 배열과 관련됩니다 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"