$0
внутри скрипта — это имя скрипта.
В приглашении это имя оболочки, которое, вероятно, -bash
в вашем случае.
имя_каталога
интерпретирует начальный тире как ввод параметра командной строки -b
, который он не поддерживает.
dirname -- $0
: большинство команд позволяют вам писать --
, чтобы все последующее воспринималось как параметры, а не опции. В этом случае это не решит проблему, но должно прояснить, в чем проблема.