は、言う、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)。 –