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.exportsoll 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 bashBefehl, obwohl $_ist ungesetzt in den Eltern.
exportist ein eingebautes Gerät, aber wenn Sie es verwendenprintenv _, zeigt es Ihnen, wie es aufgerufen wurde:/usr/bin/printenvauf diesem System.