gpt4 book ai didi

linux - 将命令的输出分配给全局数组,而不会在子 shell 之后丢失数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:39 27 4
gpt4 key购买 nike

我需要将命令的输出读取到数组并将它们存储起来,以便在我的脚本中使用。我的脚本是;

  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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com