From 90a49f0f5270f6e0ecf00f5642188817c622d390 Mon Sep 17 00:00:00 2001 From: rschaten Date: Tue, 25 Sep 2001 17:48:00 +0000 Subject: [PATCH] =?UTF-8?q?Klammer-Expansion=20zugef=FCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tab_beisp_klammerexpansion.tex | 23 +++++++++++++++++++ wie_sieht_ein_shell_skript_aus.tex | 36 +++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 tab_beisp_klammerexpansion.tex diff --git a/tab_beisp_klammerexpansion.tex b/tab_beisp_klammerexpansion.tex new file mode 100644 index 0000000..d0e2140 --- /dev/null +++ b/tab_beisp_klammerexpansion.tex @@ -0,0 +1,23 @@ + \begin{longtable}{|X l|} +% KILLED & LINE!!!! \kill + \hline + \endfirsthead + \endhead + \endfoot + \hline + \endlastfoot + +\multicolumn{2}{|X|}{\texttt{\$ mkdir /usr/local/src/bash/\{old,new,dist,bugs\}}} \\ +\multicolumn{2}{|X|}{Erzeugt die Verzeichnisse} \\ +\multicolumn{2}{|X|}{\textit{/usr/local/src/bash/old}} \\ +\multicolumn{2}{|X|}{\textit{/usr/local/src/bash/new}} \\ +\multicolumn{2}{|X|}{\textit{/usr/local/src/bash/dist}} \\ +\multicolumn{2}{|X|}{\textit{/usr/local/src/bash/bugs}} \\ +\multicolumn{2}{|X|}{\STRUT\texttt{\$ chown root /usr/\{ucb/\{ex,edit\},lib/\{ex?.?*,how\b{ }ex\}\}}} \\ +\multicolumn{2}{|X|}{Weist die folgenden Dateien / Verzeichnisse dem Benutzer root zu:} \\ +\multicolumn{2}{|X|}{\textit{/usr/ucb/ex}} \\ +\multicolumn{2}{|X|}{\textit{/usr/ucb/edit}} \\ +\multicolumn{2}{|X|}{\textit{/usr/lib/ex?.?*}} \\ +\multicolumn{2}{|X|}{\textit{/usr/lib/how\b{ }ex}} \\ +\multicolumn{2}{|X|}{Dabei wird \textit{/usr/lib/ex?.?*} noch weiter expandiert.} \\ +\end{longtable} diff --git a/wie_sieht_ein_shell_skript_aus.tex b/wie_sieht_ein_shell_skript_aus.tex index 9da3fcc..90fd97b 100644 --- a/wie_sieht_ein_shell_skript_aus.tex +++ b/wie_sieht_ein_shell_skript_aus.tex @@ -170,14 +170,6 @@ das Suchmuster \texttt{.*}. \index{Meta-Zeichen|)} -\section{Klammer-Expansion} - -man bash -/Brace Expansion - -TODO!!! - - \section{Mustererkennung}\index{Mustererkennung|(textbf}\label{mustererkennung} \index{ed=\texttt{ed}|(textbf}\index{ex=\texttt{ex}|(textbf}\index{vi=\texttt{vi}|(textbf}\index{sed=\texttt{sed}|(textbf}\index{awk=\texttt{awk}|(textbf}\index{grep=\texttt{grep}|(textbf}\index{egrep=\texttt{egrep}|(textbf} \index{*=\texttt{*}|(textbf}\index{.=\texttt{.}|(textbf}\index{\^=\texttt{\^}|(textbf}\index{\$=\texttt{\$}|(textbf}\index{Backslash|(textbf}\index{[ ]=\texttt{[ ]}|(textbf}\index{\textbackslash( \textbackslash)=\texttt{\textbackslash( \textbackslash)}|(textbf}\index{\textbackslash\{ \textbackslash\}=\texttt{\textbackslash\{ \textbackslash\}}|(textbf}\index{\textbackslash< \textbackslash>=\texttt{\textbackslash< \textbackslash>}|(textbf}\index{+=\texttt{+}|(textbf}\index{?=\texttt{?}|(textbf}\index{|=\texttt{|}|(textbf}\index{( )=\texttt{( )}|(textbf}\index{Regulärer Ausdruck|(textbf} @@ -226,6 +218,34 @@ Bei einigen Tools (\texttt{ex}, \texttt{sed} und \texttt{ed}) werden zwei Muster \index{Mustererkennung|)} +\section{Klammer-Expansion\label{klammerexpansion}\index{Klammer-Expansion|(textbf}\index{Brace Expansion|see{Klammer-Expansion}}} + +Dieser Mechanismus ist sehr praktisch, aber nur wenigen Programmierern bekannt. +Er steht nicht in jeder Shell zur Verfügung. + +Über die Klammer-Expansion (Brace Expansion) können automatisch Strings +generiert werden. Dabei wird ein Muster angegeben, nach dem neue Strings +aufgebaut werden. Dieses Muster besteht aus einem Prefix, der allen erzeugten +Strings vorangestellt wird, und einer in geschweifte Klammern eingebundenen und +durch Komma getrennten Menge von String-Teilen. Dieses Konstrukt expandiert zu +mehreren, durch Leerzeichen getrennten Strings, indem sämtliche möglichen +Permutationen generiert werden. + +Die durch die Klammern angegebenen Mengen können auch verschachtelt werden. +Dabei werden die Klammern von links nach rechts aufgelöst. Die Ergebnisse +werden nicht sortiert, sondern in der Reihenfolge ihrer Erstellung +zurückgegeben werden. + +Die Expansion von Klammern erfolgt vor der Behandlung aller anderen +Ersetzungen. Auch eventuell vorhandenen Sonderzeichen bleiben in dem +expandierten Text erhalten. So lassen sich auch Variablen durch diese Technik +erzeugen. + +\medskip\emph{Beispiele:}\nopagebreak +\LTXtable{\textwidth}{tab_beisp_klammerexpansion.tex} +\index{Klammer-Expansion|)} + + \section{Programmablaufkontrolle} Bei der Shell-Programmierung verfügt man über ähnliche Konstrukte wie bei anderen Programmiersprachen, um den Ablauf des Programms zu steuern. Dazu gehören Funktionsaufrufe, Schleifen, Fallunterscheidungen und dergleichen.\nopagebreak