GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen einem Bindestrich und zwei Bindestrichen für Eingabeaufforderungsparameter?

Es gibt keinen weit verbreiteten Standard. Es gibt eine gewisse Konsistenz, z. in GNU-Programmen, aber Sie müssen die Dokumentation jedes Programms überprüfen.

Zitat aus Wikipedia, Hervorhebung von mir:

In Unix-ähnlichen Systemen wird der ASCII-Bindestrich–Minus häufig verwendet, um Optionen anzugeben. Dem Zeichen folgen normalerweise ein oder mehrere Buchstaben . Ein Argument, das nur aus einem einzelnen Bindestrich und ohne Buchstaben besteht, gibt normalerweise an, dass ein Programm Daten verarbeiten soll, die von der Standardeingabe kommen, oder Daten an die Standardausgabe senden soll. Zwei Bindestrich-Minuszeichen ( -- ) werden in einigen Programmen verwendet, um "lange Optionen" anzugeben, wo aussagekräftigere Optionsnamen verwendet werden . Dies ist ein gemeinsames Merkmal von GNU-Software.

Normalerweise zeigen Bindestriche ein vordefiniertes Argument an. Ich denke, es wird verwendet, um sie von z. Dateinamen oder andere Bezeichnungen, die Sie als Argumente verwenden könnten. Das ist jedoch nicht immer der Fall (siehe unten).

Häufig finden Sie dasselbe Argument sowohl als kurze als auch als lange Option, wie z. in ls.

Einige Programme verwenden einen einzelnen Bindestrich für Optionen mit einem Zeichen und zwei Bindestriche für Optionen mit mehreren Zeichen, aber nicht alle (GNU find kommt in den Sinn). Einige Programme haben optionale Bindestriche oder überspringen sie ganz (tar oder BSD ps fällt mir ein).

Manchmal lange Optionen (--foo ) erfordern Argumente, während kurze Optionen (-f ) nicht (oder implizieren zumindest ein bestimmtes Standardargument).

Kurze Optionen (z. B. cut -d ' ' ) kann Argumente haben, während lange Optionen (z.B. ls --all ) haben sie nicht unbedingt.

Um ein bestimmtes Verhalten eines Programms festzulegen, müssen Sie manchmal eine kurze Option verwenden, für andere müssen Sie eine lange Option verwenden, und für einige haben Sie die Wahl.

In diesem Zusammenhang können einige Programme keine Leerzeichen zwischen einer Option und ihrem Argument verarbeiten, während andere dies nicht können.

Wie ich eingangs geschrieben habe, gibt es einfach kein gemeinsames Verhalten oder Standard. Oft können Sie ein ähnliches Verhalten auf die gleiche Bibliothek zurückführen, die für das Analysieren von Argumenten verwendet wird, aber Sie möchten wahrscheinlich nicht die Quellen lesen, um dies herauszufinden.

Sie können die Argumentsyntax eines Programms wirklich nicht von der eines anderen ableiten.

Betrachtet man auch Windows, wird es noch schlimmer:Während die Windows-Kommandozeilenaufrufe traditionell /f verwenden (zumindest meistens einzelne Zeichen) für Optionen, mit : als Trennzeichen zwischen Optionen und ihrem Wert (siehe z. B. hier); Plattformübergreifende Dienstprogramme sind weit verbreitet (wie die von Ihnen erwähnten) und bringen die gebräuchlichere Bindestrichsyntax für Argumente mit allen oben erwähnten Inkonsistenzen mit sich.


Mach einfach ls --help und schau dir die Optionen an; es sollte dir klar sein.

Es hat überhaupt nichts mit Parametern zu tun. Viele Optionen haben eine Kurzform und eine Langform, und viele haben eine und nicht die andere.

Und in Bezug auf Parameter ist es einfach so, dass es in der langen Form, wenn sie einen Parameter nehmen, so aussieht, als wäre er immer gleich. Aber offensichtlich können kurze genauso viele Parameter annehmen; nur verwenden sie kein Gleichheitszeichen.

Hier ist ein Auszug aus ls --help (man ls gibt gleichwertige Informationen). Beachten Sie, dass manche eine Langform ohne Kurzform haben (--author , --block-size ), einige haben eine Kurzform ohne Langform (-c , -f , -g ), und einige haben sowohl eine Langform als auch eine Kurzform (-A /--almost-all , -b /--escape ).

 -a, --all                  do not ignore entries starting with .
 -A, --almost-all           do not list implied . and ..
     --author               with -l, print the author of each file
 -b, --escape               print octal escapes for nongraphic characters
     --block-size=SIZE      use SIZE-byte blocks
 -B, --ignore-backups       do not list implied entries ending with ~
 -c                         with -lt: sort by, and show, ctime (time of last
                              modification of file status information)
                              with -l: show ctime and sort by name
                              otherwise: sort by ctime
 -C                         list entries by columns
     --color[=WHEN]         control whether color is used to distinguish file
                              types.  WHEN may be `never', `always', or `auto'

Dies ist eine Konvention, die von *nix stammt. Ein doppelter Bindestrich steht vor Optionen, wenn sie vollständig geschrieben werden , , während ein einzelner Bindestrich Optionen vorangestellt wird, wenn sie in Kurzform geschrieben werden . Zum Beispiel ls --all --l , kann zu ls -al abgekürzt werden . Wie man sieht, haben nicht alle Optionen ihre Ein-Buchstaben-Äquivalente, obwohl die häufiger verwendeten normalerweise eine haben.

Ob die Option ein Argument akzeptiert, spielt keine Rolle - sie kann sie entweder akzeptieren oder nicht, unabhängig davon, wie Sie die Option eingeben.

Wenn Sie sie für den einmaligen Gebrauch schreiben, spielt es keine Rolle, aber wenn Sie Befehle zum Beispiel in .alias-Dateien schreiben, ist es üblich, die vollständige Form zu verwenden. Rein zur Erleichterung des Lesens für die nächste Person.


Linux
  1. Was ist der Unterschied zwischen dem Befehl „locate“ und „find“ in Linux?

  2. Was ist der Unterschied zwischen fsck und e2fsck?

  3. Was ist der Unterschied zwischen ls und l?

  4. Was ist der Unterschied zwischen `su -` und `su --login`?

  5. Was ist der Unterschied zwischen unlink und rm?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Cat und Touch Command?

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen Kill- und Killall-Befehlen?