Если я вас правильно понял, то вы хотите извлечь оболочку из первой строки скрипта.
Когда вы используете $SHELL вы показываете оболочку, которую вы на самом деле используете, которая не должна совпадать с той, которая указана в первой строке: например, вы можете использовать use . Команда /source для запуска любого скрипта в любой запущенной оболочке.
Ниже будет показана оболочка из первой строки:
sed -n '1 s/^#!//p' "$0"
Здесь $0 - это запущенный скрипт, а команда sed выводит первую строку с начальным #! удален. Если такой строки нет, то ничего не будет возвращено, и вы можете проверить это.
Вы можете использовать $(...) чтобы получить значение из команды sed , например:-
echo Script "$0" is running with "$SHELL"
echo It should run with "$(sed -n '1 s/^#!//p' "$0")"