我需要将命令的输出读取到数组并将它们存储起来,以便在我的脚本中使用。我的脚本是;
let i=0
declare -a array
$PS -ef|$GREP -v grep|$GREP $NAME | $SED -n 's/.*-q\s\([0-9]\+\).*/\1/p' | while read line; do
array[$i]=$line
echo ${array[$i]}
(( i++ ))
echo ${#array[@]}
done < <($PS -ef|$GREP -v grep|$GREP $NAME | $SED -n 's/.*-q\s\([0-9]\+\).*/\1/p')
echo ${#array[@]}
因此,当循环退出时,由于子 shell,数组的大小变为 0。有办法解决这个问题吗?
最佳答案
您似乎在管道的两端都有相同的输入:
foo | while read line; do
...
done <( foo )
尝试删除第一个以便 while
循环不会在子 shell 中执行:
while read line; do
...
done <( foo )
如果您使用的是 bash 4 或更高版本,则可以将 while 循环替换为调用 readarray
:
readarray array <( foo )
关于linux - 将命令的输出分配给全局数组,而不会在子 shell 之后丢失数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428501/