ls -al | while read line
В данной конструкции вы через пайп "|" вызываете подпроцесс, внутри которого крутится весь цикл while, и по завершению этого процесса переменные определенные внутри него, умирают вместе с ним.
Можно изменить перенаправление, чтобы обойтис без пайпа:
imageList=()
while read line
do
echo "$line"
imageList+=("alias")
imageList+=($line)
done<<< $(ls -al)
echo ${#imageList[@]}