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

したがって、ループが終了すると、サブシェルのために配列のサイズが0になります。これを修正する方法はありますか?

4

1 に答える 1

0

パイプの両端に同じ入力があるようです。

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

whileループがサブシェルで実行されないように、最初のドロップを試してください。

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

bash 4以降を使用している場合は、whileループを次の呼び出しに置き換えることができますreadarray

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