GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es Shell Portable, einen Befehl in derselben Zeile nach der Variablenzuweisung auszuführen?

Gibt es einen Standard, der die Portabilität der Ausführung eines Befehls nach einer Variablenzuweisung in derselben Zeile abdeckt?

APPLE="cider" echo hi

Wie tragbar ist so etwas? Wo wird es funktionieren und wo nicht?

Außerdem:Meine Shell-Skripte beginnen mit #!/bin/sh, falls das einen Unterschied macht.

Akzeptierte Antwort:

Solange Sie eine POSIX-kompatible Shell verwenden, ja.

Aus der POSIX-Definition der Shell-Befehlssprache:(relevante Punkte in Fettdruck)

Ein „einfacher Befehl“ ist eine Folge von optionalen Variablenzuweisungen und Umleitungen, in beliebiger Reihenfolge, optional gefolgt von Wörtern und Umleitungen, beendet durch einen Kontrolloperator.

Wenn ein gegebener einfacher Befehl ausgeführt werden muss (d. h. wenn ein bedingtes Konstrukt wie eine UND-ODER-Liste oder eine Case-Anweisung den einfachen Befehl nicht umgangen hat), müssen die folgenden Erweiterungen, Zuweisungen und Umleitungen alle ausgeführt werden vom Anfang des Befehlstextes bis zum Ende:

  1. Die Wörter, die als Variablenzuweisungen erkannt werden oder Umleitungen gemäß Shell-Grammatikregeln werden für die Verarbeitung in den Schritten 3 und 4 gespeichert.

  2. Die Wörter, die keine variablen Zuweisungen oder Umleitungen sind, werden erweitert. Wenn nach ihrer Erweiterung Felder übrig bleiben, gilt das erste Feld als Befehlsname und die restlichen Felder sind die Argumente für den Befehl.

  3. Umleitungen müssen wie in Umleitung beschrieben durchgeführt werden.

  4. Jede Variablenzuweisung muss vor der Zuweisung des Werts um Tildeerweiterung, Parametererweiterung, Befehlsersetzung, arithmetische Erweiterung und Entfernung von Anführungszeichen erweitert werden.

In der vorstehenden Liste kann die Reihenfolge der Schritte 3 und 4 für die Verarbeitung spezieller integrierter Dienstprogramme umgekehrt werden; siehe Spezielle integrierte Dienstprogramme.

Wenn kein Befehlsname resultiert, sollen Variablenzuweisungen die aktuelle Ausführungsumgebung beeinflussen. Andernfalls werden die Variablenzuweisungen für die Ausführungsumgebung des Befehls exportiert und wirken sich nicht auf die aktuelle Ausführungsumgebung aus (außer bei speziellen Einbauten).

Auch ja #!/bin/sh Angelegenheiten. Aus der POSIX-Definition von sh :

Das Dienstprogramm sh ist ein Befehlsspracheninterpreter, der Befehle ausführen soll, die aus einer Befehlszeilenzeichenfolge, der Standardeingabe oder einer angegebenen Datei gelesen werden. Die Anwendung muss sicherstellen, dass die auszuführenden Befehle in der in Shell Command Language beschriebenen Sprache ausgedrückt werden .

Also im Grunde sagt es, dass sh müssen die oben genannten Regeln befolgen.

Verwandte:Diese Kabelverbindungskomponente mit schwarzer Schale heißt?

Solange Sie sich also auf einem POSIX-kompatiblen Betriebssystem befinden, ist alles in Ordnung.


Linux
  1. Wie weist man die Ausgabe eines Befehls einer Shell-Variablen zu?

  2. Führen Sie einen Sudo-Befehl aus und geben Sie das Passwort in derselben Zeile an?

  3. Echotext nach Curl-Befehl in derselben Zeile?

  4. Shell-Skript, nach dem Echo einer Nachricht in derselben Zeile lesen

  5. Wie werden Zeilenumbrüche beibehalten, wenn die Befehlsausgabe in einer Variablen gespeichert wird?

Führen Sie die Linux-Befehlszeile auf Ihrem iPad aus

So führen Sie MySQL/MariaDB-Abfragen direkt von der Linux-Befehlszeile aus

Befehlszeilenaliase in der Linux-Shell

Tipps/Tricks zur Linux-Kommandozeilennavigation 3 - die CDPATH-Umgebungsvariable

Meistern Sie die Linux-Befehlszeile

Googler – Führen Sie Google-Suchen über die Befehlszeile aus