Вам нужно запустить «test.sh», а не «test».
test sub_cmd $APP
На самом деле вы запускаете команду test, которая находится в одном из каталогов lib на вашем пути.
Если вы наберете
which test
вы можете увидеть, какая команда / скрипт / программа будет запущена.
Когда вы добавляете в команду префикс относительного пути (например, ./) или абсолютного пути (т. Е. Начинающийся с /), bash будет искать эту папку в этой конкретной папке. Если вы пропустите путь, он будет искать каталоги, перечисленные в переменной окружения $ PATH, и выполнит первый, с которым столкнется. Команда which делает то же самое, но просто перечисляет скрипт / программу вместо того, чтобы выполнить его.