Pourquoi existe-t-il des alternatives courtes et longues pour les options de ligne de commande?

23

La plupart des commandes unixoïdes proposent des alternatives courtes et longues pour les options de ligne de commande, comme ls -aet ls --all, ou ls -Aet ls --almost-all. Pourquoi ces deux façons existent-elles? L'un est plus court à taper, l'autre est plus facile à lire et à comprendre. Mais chaque fois que j'écris un script shell, je dois décider lequel je veux utiliser. Est-il connu pourquoi les deux alternatives existent? Lequel était le premier, pourquoi l'autre a été présenté. Sous DOS / Windows par exemple, il n'y a presque que des options d'une lettre insensibles à la casse.

ygoe
la source

Réponses:

24

À l'origine, il n'y avait que des options à un seul caractère. Certains programmes ont pris des options à plusieurs caractères, mais toujours avec un seul tiret. Les options à plusieurs caractères AFAIK à double tiret proviennent de GNU ; ils ont été introduits car ils sont plus lisibles et souvent plus mémorables (et vous pouvez en avoir plus de 52). De nombreux programmes ont maintenant les deux: des options courtes lorsque vous tapez sur la ligne de commande et vous souvenez du caractère, des options longues pour les scripts ou sur la ligne de commande si vous vous souvenez seulement du nom de l'option plus longue.

Gilles 'SO- arrête d'être méchant'
la source
15
+1 pour avoir mentionné que les options longues sont meilleures pour les scripts, car elles aident à documenter les choses
Norman Gray
5
Quant à "seulement 52 d'entre eux": Essayez ls -BartSimpsonIsJustCool(ou Greatsi vous êtes sur Solaris.
Aaron Digulla
1
@AaronDigulla Est-ce cet œuf de Pâques?
user712092
5
@ user712092 Non, c'est une astuce. Sous Linux, tout ce qui est après l' Iargument est l' -Ioption, donc cela ne fait une différence que si vous avez un fichier appelé sJustCooldans le répertoire courant. La -BartSimpsonpièce peut être réorganisée, sauf que le S(trier par taille) doit rester après le t(trier par date). N'a également maucun effet lorsque nou osont présents. Donc, la commande est équivalente à ls -BSainopsr, et si je n'ai rien oublié, vous ne pouvez pas supprimer une autre lettre pour obtenir la même sortie et vous pouvez réorganiser ces lettres librement.
Gilles 'SO- arrête d'être méchant'
2
@Gilles: soit dit en passant, pour être aussi précis que possible, il peut y avoir 62 options courtes différentes (y compris les chiffres), pas 52. Considérez gzip -9 filenamepar exemple.
Radko Dinev
1

Vous pourriez deviner que c'est une question de goût. Lorsque vous tapez sur la ligne de commande, une option courte peut être préférée, en particulier dans le cas des options run-together (par exemple ls -AL). Les options longues sont meilleures pour transmettre l'intention, vous n'avez donc pas besoin de consulter la page de manuel lorsque vous lisez ls --almost-all --dereference.

Naturellement, au fur et à mesure que vous acquérez de l'expérience, vous pouvez apprendre que les options courtes -Aet -Lcourtes sont suffisamment connues et ne nécessitent pas cette documentation supplémentaire. Surtout dans une commande complexe qui peut combiner plusieurs commandes de manière intéressante avec l'évaluation, la redirection, etc. Dans un tel cas, vous pourriez préférer la brièveté à la documentation.

Chen Levy
la source
1

Un autre objectif que je peux voir en ayant différentes façons de spécifier les paramètres (court et long) est que lors de la frappe, les gens en ligne de commande Unix / Linux aiment avoir des commandes aussi courtes que possible. Cependant, ceux-ci peuvent devenir cryptiques, et si un script est écrit en utilisant ces versions courtes, ils peuvent devenir difficiles à comprendre à l'avenir. L'utilisation de la version longue peut rendre la commande SAME plus lisible et compréhensible par quelqu'un qui n'est pas le gourou de cette commande, surtout si cette commande est en fait un script écrit localement par opposition à une commande bien connue.

jfmessier
la source