数组在循环内更新,但循环外部为空
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组在循环内更新,但循环外部为空相关的知识,希望对你有一定的参考价值。
我尝试以下一种方式定义数组:
#!/bin/bash
function try {
local arr=()
sort -n a.txt | while read line; do
arr=("${arr[@]}" "${line}")
declare -p arr
done
declare -p arr
}
try
我得到一个奇怪的事情 - 在while
期间阵列更新,一切都很好。但是在while循环之外我得到的是arr是空的。
这里发生了什么?
编辑:在第一个答案之后,用这种方式(没有像他的建议那样的管道):
#!/bin/bash
function try {
local arr=()
while read line; do
arr+=("${line}")
declare -p arr
done < "`sort -n a.txt`"
declare -p arr
}
try
答案
这样做(需要bash):
#!/usr/bin/env bash
# declare an array
arr=()
# loop through results of sort and populate an array
while read -r line; do
arr+=( "$line" )
done < <(sort -n a.txt)
# Check array content
declare -p arr
- 不要使用管道来避免分支子壳,而是使用process substitution。在父shell中看不到子shell中所做的更改。
- 使用
array+=(item)
语法将项附加到数组
请注意,使用bash
你也可以使用mapfile
并避免使用while
循环:
mapfile -t arr < <(sort -n a.txt)
以上是关于数组在循环内更新,但循环外部为空的主要内容,如果未能解决你的问题,请参考以下文章