Не идеальное решение, но оно включает объяснение того, почему $ # не работает так, как вы ожидаете:
$ # возвращает количество аргументов, переданных функции. Вы прочитали 'opt' как пользовательский ввод, а не аргументы функции.
Одно из решений может заключаться в том, чтобы обернуть вашу бесконечность, в то время как l oop, внутри функции, а затем передать в нее $ opt. Тогда это будет аргумент (ы) вашей функции, и вы можете использовать $ #, чтобы посчитать, сколько их. Для получения подробной информации о работе многих встроенных функций в bash, вы можете попробовать:
man bash
, но я принимаю, что там есть lot информации. Вы можете искать соответствующие слова, обычно используя "/ {searchstring}" (но вам, вероятно, потребуется "экранировать" специальные символы, в этом случае: "/ \ $ \ #")