Я не согласен с ответом JVB. Рассмотрим следующий сценарий в формате csh без шебанга:
#
set x = 'a'
if ($x == 'a') then
echo "running csh"
endif
На моей машине, где моя оболочка по умолчанию (t)csh, результат:
anukis% ./shell-test
running csh
Теперь отредактируйте скрипт для удаления верхней строки:
set x = 'a'
if ($x == 'a') then
echo "running csh"
endif
Теперь перезапустите его, и результат:
anukis% ./shell-test
./shell-test: 6: Syntax error: end of file unexpected (expecting "fi")
Какая разница? Древний способ отличить csh от (Bourne) sh: если первая строка начинается с восьмиугольника ("#"), предположим, что это скрипт C-shell, в противном случае - оболочка Bourne (-type).