는 말, test.sh
이 예제를 고려 : 나는 for ((...
행의 주석을 해제하면while 루프에서 Bash 빌드 배열 (지속하지 않음)?
cat > test.txt <<'EOF'
test 1
test 2
test 3
EOF
declare -a myarr
declare -p myarr # "declare: myarr: not found"
myarr=()
declare -p myarr # "declare -a myarr='()'"
#for ((i=1; i<=3; i++)); do # ok
sed -n 's!test!TEST!p' test.txt | while read i; do # not preserved ?!
myarr=("${myarr[@]}" "pass $i")
declare -p myarr
done
declare -p myarr # "declare -a myarr='()'" ?!
하고 sed -n ...
라인을 주석 다음 bash test.sh
의 출력은 예상대로입니다 :
test.sh: line 8: declare: myarr: not found
declare -a myarr='()'
declare -a myarr='([0]="pass 1")'
declare -a myarr='([0]="pass 1" [1]="pass 2")'
declare -a myarr='([0]="pass 1" [1]="pass 2" [2]="pass 3")'
declare -a myarr='([0]="pass 1" [1]="pass 2" [2]="pass 3")'
그러나, 나는 경우 게시 된 스크립트를 실행하면 myarr
은 while
루프에 생성되지만 외부에서는 한 번 비어 있습니다.
test.sh: line 8: declare: myarr: not found
declare -a myarr='()'
declare -a myarr='([0]="pass TEST 1")'
declare -a myarr='([0]="pass TEST 1" [1]="pass TEST 2")'
declare -a myarr='([0]="pass TEST 1" [1]="pass TEST 2" [2]="pass TEST 3")'
declare -a myarr='()'
이 경우 myarr
(빈 또는 while
루프 이후)이 비어 있습니다. 왜 그 값을 유지하려면 어떻게해야합니까?
이것은 [BashFAQ # 24 (http://mywiki.wooledge.org/BashFAQ
이를 방지하기위한 프로세스를 교체 사용/024). –