Несколько более техническое объяснение:
Когда вы запускаете исполняемый файл в UNIX/Linux/Windows/SomeOS/AnyOS, система должна знать, как его запустить. В UNIX/Linux есть специальные правила для первых нескольких байтов файлов, чтобы сообщить ядру, как его запустить. Для сценариев специальными символами являются '#!». Если ядро видит это как первые два символа, оно знает, что файл является скриптом, и просматривает оставшуюся часть строки для исполняемого файла, запускающего скрипт. Итак, если файл /path/to/script.sh запускается:
#!/bin/sh
Ядро увидит '#!', знайте, что это скрипт, найдите и запустите /bin /sh и передайте путь к файлу скрипта /path/to/script.sh в качестве параметра. Поскольку все интерпретаторы сценариев (bash, perl, csh, python и т.д.) Используют «#» в качестве символа комментария, они все просто проигнорируют эту строку « shebang » в качестве комментария.
Вы, вероятно, никогда не видели этого раньше, потому что Windows обрабатывает это совершенно по-другому. В Windows он не использует эти «волшебные» символы, а вместо этого сопоставляет расширение файла с способом его запуска.