Wie exportiere ich eine Shell-Variable in Bash?

Wie exportiere ich eine Shell-Variable in Bash?

Normalerweise arbeite ich in Linux mit Bash und wenn ich eine Variable exportieren muss, schreibe ich möglicherweise:

export LC_ALL=C

Allerdings arbeite ich derzeit mehr mit Solaris, und die Solaris-Administratoren, mit denen ich zusammenarbeite, schreiben immer:

LC_ALL=C ; export LC_ALL

Gibt es einen Grund, Letzteres Ersterem vorzuziehen?

Ich vermute, dass Ersteres von einigen Shells nicht erkannt wird. Von welchen?

Danke.

Antwort1

Ich glaube, dass die echte Bourne-Shell (/bin/sh bei vielen kommerziellen Unix-Varianten) die Zuweisung und den Export in einer einzigen Anweisung nicht unterstützt. So erinnere ich mich noch aus meiner Zeit bei Solaris.

Ich weiß nicht, ob die neuen Solaris-Versionen jetzt standardmäßig Bash verwenden. Unabhängig davon ist Ihr letzterer Fall portabler, also würde ich dabei bleiben.

Antwort2

Unter Solaris erfordert /bin/sh die beiden Anweisungen, während /bin/bash mit einer Anweisung auskommt. Unter Linux ist /bin/sh normalerweise ein symbolischer Link zu /bin/bash, es gibt also keinen Unterschied.

Wenn Sie ein Skript schreiben, das von einem anderen Skript als Quelle verwendet werden kann, verwenden Sie immer das Zwei-Anweisungen-Format. Wenn das Skript nicht als Quelle verwendet wird oder wird, überprüfen Sie einfach die Shebang-Zeile oben im Skript, um zu sehen, welche Shell Sie verwenden. Viele Solaris-Skripte verwenden /bin/sh, und dies ist die Standardeinstellung für viele Softwarepakete. Daher bevorzugen die meisten Administratoren die portablere Art des Exportierens einer Variable.

Antwort3

Sie können Ersteres verwenden, wenn Sie hauptsächlich mit Bash arbeiten, da Sie Bash seit Solaris 10 ohne gefährliche Nebenwirkungen als Root-Shell verwenden können. Wenn die Maschine jemals im Einzelbenutzermodus neu gestartet werden muss und Bash nicht findet, gibt es einen automatischen Fallback auf Bourne Shell.

Antwort4

Ich arbeite an Solaris 2.6, circa 1998. Diese Version kam ursprünglich nur mit sh und csh. Wenn ich sh verwende, sehe ich, dass Sie die von Ihnen erwähnte zweizeilige Version benötigen, um das richtige Ergebnis von env zu sehen. Wenn ich bash von sunfreeware.org verwende, funktioniert es mit der einzeiligen Version einwandfrei.

verwandte Informationen