Whats the difference in how these are used?
Isso depende inteiramente do programa, porque ...
Does the command-line tool decide how to determine them differently, or does Linux know they all mean the same thing, but feeds them to the application differently?
... os argumentos para o processo entram como uma matriz de strings individuais.
Há duas coisas envolvidas aqui: uma é o shell, que analisa a entrada que você digita e executa o processo. Isso, por exemplo, divide a string no espaço em branco e passa para widget . Veja, por exemplo, man sh e man bash para detalhes sobre como eles lidam com essas coisas.
Por fim, no entanto, widget obtém o argumento -fizz ou --fizz exatamente como está escrito, como uma string. Decide o que fazer com isso.
Existem alguns padrões - muitas variantes de getopts e popt que processam esses argumentos para widget e têm algum grau de comportamento "padrão".
Nada impede o autor de widget de inventar seu próprio padrão.
Então, finalmente, se você for o autor de widget ou modificar o código-fonte, você pode absolutamente fazer com que ele trate #f# como o argumento fizz . Você não pode fazer isso sem mudar o programa.