1

我需要读取我的命令的输出来排列和存储它们以便在我的脚本中使用之后。我的脚本是;

  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[@]}

因此,当循环退出时,由于 subshel​​l,数组的大小变为 0。有没有办法解决这个问题?

4

1 回答 1

0

您的管道两端似乎有相同的输入:

foo | while read line; do
    ...
done <( foo )

尝试删除第一个,以便while循环不会在子 shell 中执行:

while read line; do
    ...
done <( foo )

如果您使用的是 bash 4 或更高版本,则可以将 while 循环替换为调用readarray

readarray array <( foo )
于 2012-07-11T10:01:24.457 回答