скрипт 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 

Связанный контент