Wann verwenden wir set -k
Option in Bash?
Bash Referenzhandbuch sagt,
Alle Argumente in Form von Zuweisungsanweisungen werden für einen Befehl in die Umgebung gestellt, nicht nur diejenigen, die vor dem Befehlsnamen stehen.
Ich verstehe, was die Option tut, konnte mir aber nicht vorstellen, wann wir sie brauchen.
-k
können wir 30 Jahre alte Shell-Skripte ausführen, ohne sie umgestalten zu müssen. Übergeben Sie temporäre Umgebungsvariablen stattdessen mithilfe der Präfixsyntax:var1=x var2=y command ...
Antworten:
Sie können es grundsätzlich immer dann verwenden, wenn Sie die an ein Shell-Skript übergebenen Umgebungsvariablen (als Argumente) "einfügen" möchten, als ob sie in der Umgebung über festgelegt
export
wären, ohne dass sieexport
vor dem Ausführen von Befehlen permanent in der Liste gespeichert sein müssen .HINWEIS: Es gibt auch die lange Form des
-k
Schaltersset -o keyword
.Beispiel
Nun, wenn ich
set -k
:Aber wenn ich nur das obige Skript ausführen würde:
Was macht der Export?
Wenn wir also so etwas
export | grep VAR
zu unserem Skript hinzufügen würden :Und wir haben unsere obigen Tests erneut durchgeführt:
Aber ohne
set -k
:Dies
set -k
ermöglicht uns, Variablen vorübergehend in Masse zu exportieren.Ein anderes Beispiel
Wenn wir mehrere Variablen setzen, werden sie alle exportiert:
Dann werden also nur alle Umgebungsvariablen injiziert?
Nein
-k
macht hier eine sehr explizite Sache. Es werden nur Variablen exportiert, die in der Befehlszeile enthalten waren, als ein Befehl ausgeführt wurde.Beispiel
Sagen wir, ich setze diese Variable:
Wenn wir jetzt den gleichen Befehl ausführen, lassen wir Folgendes aus
VARCMD1="hi"
:Aber warum gibt es das?
Ich habe diese Quelle gefunden, die ein wenig über diese Funktion mit dem Titel "Keyword Parameter Assignment Strings" erklärt. HINWEIS: Die Quell-URL verwendet eine IP-Adresse, sodass ich hier auf SE keine direkte Verknüpfung herstellen kann.
quelle
set -k
haben sie dazu-o keyword
die-k
Option angegeben. Bedeutet das etwas?set -o keyword
ist die Langform vonset -k
. Sehenhelp set | grep -- '-k'
../cmd.bash VARCMD=hi
mussset -k
dafür sorgen , dass es genau soVARCMD=hi ./cmd.bash
funktioniert, wie es ohne das gehtset -k
. Schätze, die spezielle Frage des OP./cmd.bash VARCMD=hi
Jede praktische Verwendung von
set -k
ist wahrscheinlich nur persönlicher Stil. Einige - vielleicht diejenigen, die Programmiersprachen mögen, die die Möglichkeit bieten, Schlüsselwortargumente in Funktionsaufrufen zu verwenden, oder jene wenigen, diedd
die Syntax des Befehls mögen - bevorzugenzu
Der eigentliche Grund, warum die Option in einigen Shells vorhanden ist, wird in der Begründung für den Befehl set im POSIX-Standard erläutert :
quelle