По традиции в командной строке спецсимволами (читай: дефисами) выделяются *ключевые слова* программы, а неключевые (типа имён файлов, регэкспов, чисел (в том числе отрицательных)) — нет. Хотя ежу ясно, что ввиду конечности ключевых слов, спецсимволами нужно маркировать *неключевые* слова.
# традиции
foo -key filename # для защиты "от дурака" лучше даже `-key -- filename`
bar -key -- -42
# разум (тут в качестве спецсимвола взято двоеточие)
foo key :filename
bar key :-42
Как так получилось? Unix писали вроде бы умные люди, и закладывали традиции тоже они.
Перемещено post-factum из development