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

时间:2012-07-11 08:26:36

标签: linux bash

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

  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时。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

readarray array <( foo )