Was ist die Verwendung des Befehls quote
? Ich habe keine Informationen darüber gefunden, es ist nicht unter den ausführbaren Dateien in /bin
Ordnern und es kann nicht unter den integrierten Bash- Dateien gefunden werden. Es scheint, dass es nur seinen ersten Parameter ausgibt, wie ein echo
Befehl und nichts weiter.
command-line
bash
whtyger
quelle
quelle
quote
das für einen so obskuren Zweck verwendet wird ... Kein Präfix, um es als "intern" zu kennzeichnen, keine Dokumentation, nichts, es sei denn, Sie gehen in die Implementierungsdetails der fortschrittlichen Vervollständigungsmechanik der Distribution ein. Ich finde das etwas störend.Antworten:
Was ist es?
Ich habe festgestellt, dass dieser Befehl in meiner Shell nicht funktioniert ( fish, friendly interactive shell ). Es scheint, als würde es nur in bash funktionieren (Ubuntus Standardeinstellung).
Was tut es? Wofür kann es verwendet werden?
Es werden die Anführungszeichen hinzugefügt, aber keine Zeilenumbrüche. Es entgeht auch einfachen Anführungszeichen in einer Weise, die für die Bash geeignet ist. In Skripten kann es nützlich sein, eine Variable oder eine andere Art von Zeichenfolge in Anführungszeichen zu setzen. Sie benötigen dies beispielsweise für Pfade / Parameter mit Leerzeichen. Es gibt jedoch auch andere Möglichkeiten, dies zu tun.
Es ist wirklich seltsam, dass ich keine Dokumentation (im Web) darüber finden konnte. Aber es ist leicht zu sehen, was es tut.
quelle
which
ist nutzlos, sowohl in interaktiven Shells als auch in Skripten. Verwenden Sietype
stattdessen.type quote
Zeigt an, dass es sich um eine Funktion handelt, und zeigt sogar die Funktionsdefinition an. Laufen Siehelp type
für mehr auf demtype
eingebauten./etc/bash_completion
, die~/.bashrc
standardmäßig bezogen wird, nicht von der Stelle,/etc/bash.bashrc
an der der betreffende Abschnitt auskommentiert/etc/bash_completion
ist. Auch/usr/share/bash-completion/
Ordner fehlt in Ubuntu 12.04.quote
ist eine Funktion, die in der Datei definiert ist (hier auf meinem Debian-System, aber ich denke, es ist dasselbe auf Ubuntu)/usr/share/bash-completion/bash_completion
, die selbst/etc/bash.bashrc
beim Start von Bash bezogen wird .Ich würde diese Funktion niemals nutzen! Wenn Sie etwas zitieren müssen, damit es von einer Shell sicher verwendet werden kann, verwenden Sie
printf
den%q
Modifikator wie folgt:Selbst wenn dies sehr selten verwendet wird, gibt es immer bessere Strategien für High-Level-Inhalte als wir, die Benutzer, normalerweise. Dieses
quote
Ding wird intern von etwas Obskurem benutzt, von dem wir nicht einmal wissen wollen. Diesequote
Funktion ist wahrscheinlich herstellerspezifisch / vertriebsspezifisch (lesen Sie Debian-spezifisch) und ist wahrscheinlich überhaupt nicht portierbar und kann sich in zukünftigen Versionen sogar ändern.Bearbeiten. Ich habe gerade ein Ubuntu 12.04-System überprüft, und die
quote
Funktion ist definiert in/etc/bash_completion
, bezogen von/etc/bash.bashrc
, selbst bezogen von/etc/profile
.Wie habe ich das festgestellt? mit etwas heuristik:
Überprüfen Sie, ob
quote
angezeigt wird in/etc/profile
:Weiter mit dem nächsten Schritt.
Wovon werden die Dateien bezogen
/etc/profile
?Ich habe
$i
(Notwendigkeit , in die Quelle zu suchen , was diese Quellen, aber in diesem Fall ist es die Dateien/etc/profile.d/*.sh
falls vorhanden (und wenn lesbar) und/etc/bash.bashrc
. Auf der Suche in/etc/bash.bashrc
.quote
in/etc/bash.bashrc
? ja / nein, etc ...quelle
quote
Entgeht eigentlich einfachen Anführungszeichen, so dass es von der Shell verwendet werden kann. Es funktioniert genauso gut wieprintf %q
für diesen Anwendungsfall.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Sie würden sehen , so etwas wieExpected: ~/.bashrc
,quote: ~/.bashrc
undprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
quote
ist eine Funktion:Diese Funktion wird irgendwo in einer Bash-Initialisierungsdatei definiert. Genauer gesagt, wenn Sie Ubuntu 13.04 verwenden, finden Sie es in
/usr/share/bash-completion/bash_completion
der Zeile 142.Verwenden Sie den folgenden Befehl, um dies zu überprüfen:
Sein Zweck ist offensichtlich klar.
quelle
$INPUT
, die Leerzeichen, Anführungszeichen oder andere Zeichen enthalten kann, und um eine Zeichenfolge zurückzugeben, die definitiv nur von bash als einzelnes Argument behandelt wird.