bash スクリプトはループ外で配列を読み取ります

bash スクリプトはループ外で配列を読み取ります

これは bash スクリプトを書く初めての試みですが、for ループの外で配列を読み取ることができません。
私がやろうとしているのは、/MyDir のすべてのファイルの名前を配列に格納することです。
その名前で実行されているプロセスがあるかどうかを確認します。
実行中のプロセスと実行されていないプロセスの名前を別の配列に
格納します。for ループの外で、配列と各配列の要素数の両方を出力します。
以下は私が取り組んでいるコードです。
ご指導ください。

#!/bin/bash
declare -a dead
declare -a live
cd /usr/local/MyDir/
FILES=*
for f in $FILES
do
  ps -ef | grep $f > /dev/null
  if [ $? -eq 0 ];
then
    live+=( "$f" )
    echo "Process $f is running."
else
   dead+=("$f")
   echo "Process $f is not running."
fi
done

echo "${[#@live]} Processes are running."
echo  "List of Processes live ${live[@]}"
echo "${[#@dead]} Processes are dead."
echo "List of Processes dead ${dead[@]}"

答え1

配列の任意の要素は、次の構文を使用して参照できます。

${ArrayName[subscript]}

次の構文を使用すると、bash シェルの配列の長さを簡単に確認できます。

${#ArrayName[@]}

下部のコードを次のように変更します。

echo "${#live[@]} Processes are running."
echo  "List of Processes live ${live[@]}"
echo "${#dead[@]} Processes are dead."
echo "List of Processes dead ${dead[@]}"

そして次のような結果が得られます。

~$ bash 2.sh
Process bin is running.
Process games is running.
Process include is running.
Process lib is running.
Process local is running.
Process locale is running.
Process sbin is running.
Process share is running.
Process src is running.
9 Processes are running.
List of Processes live bin games include lib local locale sbin share src
0 Processes are dead.
List of Processes dead 

関連情報