it-swarm.com.de

Wie werden Klammern in der Befehlszeile interpretiert?

Beim Lesen der Einrichtung von grub stieß ich auf einen Artikel, in dem behauptet wurde, ich müsse eine der folgenden beiden Syntaxen verwenden:

echo \(hd0,0\) >> /boot/grub/grub.conf

oder

echo '(hd0,0)' >> /boot/grub/grub.conf

weil in der Befehlszeile Klammern auf besondere Weise interpretiert werden. Was ist das Besondere an den Klammern? Wie werden sie interpretiert?

47
Steve Brown

Klammern bezeichnen eine Unterschale in Bash. Um das man bash Seite:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the Shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

dabei ist ein list nur eine normale Folge von Befehlen.

Dies ist eigentlich ziemlich portabel und nicht nur für bash spezifisch. Die POSIX Shell Command Language-Spezifikation enthält die folgende Beschreibung für (compound-list) Syntax:

Führen Sie die Verbundliste in einer Subshell-Umgebung aus. siehe Shell-Ausführungsumgebung . Variablenzuweisungen und integrierte Befehle, die sich auf die Umgebung auswirken, bleiben nach Abschluss der Liste nicht mehr wirksam.

48
jw013

Eine zwischen Klammern eingebettete Befehlsliste wird als Unterschale ausgeführt.

Variablen in einer Unterschale sind außerhalb des Codeblocks in der Unterschale nicht sichtbar. Sie sind für den übergeordneten Prozess und die Shell, die die Subshell gestartet hat, nicht zugänglich. Dies sind praktisch lokale Variablen.

Siehe Linuxtopia - Kapitel 20. Subshells

12
mark