Vraag Wat is het verschil tussen de enkele streepjesbalk en dubbele streepjesvlag op shell-opdrachten?


Ik ben nieuw bij het werken in de shell en het gebruik van deze opdrachten lijkt willekeurig. Is er een reden dat de ene vlag één streepje heeft en de andere een dubbel streepje?


54
2018-05-10 14:27


oorsprong


Het zou moeten worden beheerst door de POSIX-standaard: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html - cjc
Die link is nu 404 @cjc :( Een mogelijk betrouwbaardere link zou kunnen zijn en.wikipedia.org/wiki/POSIX - Bernhard Hofmann


antwoorden:


Een enkel koppelteken kan worden gevolgd door meerdere vlaggen met één teken. Een dubbel streepje geeft een voorvoegsel voor een enkele multicharacter-optie.

Beschouw dit voorbeeld:

tar -czf

In dit voorbeeld -czf geeft drie vlaggen met één teken op: c, z, en f.

Overweeg nu een ander voorbeeld:

tar --exclude

In dit geval, --exclude specificeert een enkele, multicharacter optie genaamd exclude. Het dubbele koppelteken disambigueert het opdrachtregelargument en zorgt ervoor dat tar interpreteert het als exclude in plaats van een combinatie van e, x, c, l, u, d, en e.


91
2018-05-10 14:32



@kylex, nee, omdat er geen lange optie is met de naam "c" en de - betekent een lange optie, geen enkele tekenoptie volgt. - psusi
Soms kunnen zelfs lange opdrachten uit één stuk bestaan. 'Cdrecord' gebruikt bijvoorbeeld alle single-dashed commando's (-ject -dao ...). Het hangt allemaal af van het programma, maar de meeste (!) Van hen gebruiken - voor single en - voor opdrachten met meerdere tekens (lang) - mulaz
@mulaz, ja, cdrecord doet nogal wat gekke dingen. - psusi
Houd er ook rekening mee - op zichzelf gebruikt is meestal het einde van de opties. kijk hier voor meer info: unix.stackexchange.com/questions/11376/... - Sirex
@killjoy, omdat de auteurs van die programma's door onwetendheid of keuze de conventie natuurlijk niet volgden. Net als cdrecord genoemde jaren geleden in de bovenstaande opmerkingen. - psusi


Het hangt allemaal af van het programma. Gewoonlijk wordt "-" gebruikt voor 'korte' opties (éénletter, -h) en '-' wordt gebruikt voor 'lange' (er) opties (--help).

Korte opties kunnen meestal worden gecombineerd (dus "-h -a" is hetzelfde als "-ha")

In Unix-achtige systemen wordt het ASCII-koppelteken-minus vaak gebruikt om opties te specificeren. Het karakter wordt meestal gevolgd door een of meer letters. Een argument dat een enkel koppelteken-minus is op zichzelf zonder enige letters, geeft gewoonlijk aan dat een programma gegevens moet verwerken die afkomstig zijn van de standaardinvoer of gegevens naar de standaarduitvoer sturen. Twee koppeltekens met minteken (-) worden in sommige programma's gebruikt om "lange opties" op te geven waar meer beschrijvende optienamen worden gebruikt. Dit is een standaardkenmerk van GNU-software.

bron


14
2018-05-10 14:35



Dus waarom is het dan java -versie en ant -versie? - killjoy


Het is echt een conventie. Het kan parsers echter helpen om efficiënter te weten wat de opties zijn die aan het programma worden doorgegeven. Bovendien zijn er handige hulpprogramma's die kunnen helpen bij het ontleden van deze opdrachten, zoals getopt(3) of de niet-standaard getopt_long(3) om de argumenten van een programma te helpen analyseren.

Het is leuk, want we kunnen meerdere korte opties gecombineerd hebben, zoals andere antwoorden zeggen, zoals tar -xzf myfile.tar.gz.

Als er een "lisa" -argument voor was ls, er zou waarschijnlijk een andere betekenis moeten zijn om te typen ls -lisa dan ls --lisa. De eerste zijn de l, i, s, en a parameters, niet het woord.

Eigenlijk zou je kunnen schrijven ls -l -i -s -a, wat precies hetzelfde betekent als ls -lisa, maar dat zou afhangen van het programma.

Er zijn ook programma's die niet aan deze conventie voldoen. Vooral voor mijn zicht, dd en gcc.


6
2018-05-10 18:56





korte opties met enkel streepje vs. lange opties met dubbel streepje

korte opties kunnen worden gecombineerd in een enkel argument;

for example: ls -lrt #instead of ls -l -r -t

Als we lange opties toestaan ​​met één streepje, veroorzaakt dit dubbelzinnigheid. Om dit op te lossen gebruiken we een dubbel streepje voor lange opties.


2
2017-08-29 03:48