Если вы хотите обнаруживать только цифры (, а не другие типы символов ), вам следует использовать простое регулярное выражение.
[[ ${numbers} =~ ^([[:digit:]]) ]] && var=${BASH_REMATCH[1]}
В $var есть цифра или она пуста (даже не объявлена ).
Ваш скрипт что-то делает внутри подоболочек. Пример:
#!/usr/bin/env bash
sleep 10
echo outer done
#!/usr/bin/env bash
(sleep 10; echo inner done)
echo outer done
Если вы запустите первый из них, подоболочки не будет, поэтому вы увидите только один из них в списке процессов. Если вы запустите второй из них, у вас будет подоболочка, поэтому он разветвится, и вы увидите два из них в списке процессов. (Если вы хотите получить более подробную информацию о вашей конкретной ситуации, опубликуйте полное содержание вашего скрипта в вопросе.)