Bash Manual sagt (Manpage, mein Schwerpunkt):
Wenn Bash einen externen Befehl aufruft, wird die Variable
$_
auf den vollständigen Pfadnamen des Befehls gesetzt und in seiner Umgebung an diesen Befehl übergeben.
Und ( spezielle Parameter ):
_
(
$_
, ein Unterstrich.) Legen Sie beim Start der Shell den absoluten Pfadnamen fest, der zum Aufrufen der Shell oder des Shell-Skripts verwendet wird, die bzw. das in der Umgebungs- oder Argumentliste übergeben wird. Erweitert anschließend nach der Erweiterung zum letzten Argument des vorherigen Befehls. Stellen Sie außerdem den vollständigen Pfadnamen ein, der zum Aufrufen jedes ausgeführten und in die in diesen Befehl exportierte Umgebung platzierten Befehls verwendet wird. Beim Überprüfen von E-Mails enthält dieser Parameter den Namen der E-Mail-Datei.
In einer Bash-Shell laufe ich:
$ bash $ export | grep '_='
Laut Handbuch
_
sollte eine Umgebungsvariable der neuen Bash-Shell sein.export
soll alle Umgebungsvariablen der neuen Bash-Shell ausgeben, gibt aber nicht aus_
. Ich frage mich also, ob_
es sich um eine Umgebungsvariable der neuen Bash-Shell handelt.Tatsächlich passiert in jeder Bash-Shell dasselbe
$ export | grep '_='
gibt nichts aus. Ich frage mich also, ob
_
es jemals eine Umgebungsvariable einer Bash-Shell gibt.Zum Vergleich:
$ dash $ export | grep '_=' export _='/bin/dash'
Mein Beitrag ist inspiriert von Mikes Kommentar und Stephanes Antwort .
bash -c export | grep _=
(von Bash), wird zeigen , wie die Eltern - Shell den aufgerufenen bash
Befehl, obwohl $_
ist ungesetzt in den Eltern.
export
ist ein eingebautes Gerät, aber wenn Sie es verwendenprintenv _
, zeigt es Ihnen, wie es aufgerufen wurde:/usr/bin/printenv
auf diesem System.