Remove Pattern
remove left pattern
${parameter:#pattern} Remove small left pattern Wenn das pattern mit dem Anfang des Inhalts von parameter übereinstimmt, so wird nur der Rest des Parameters substituiert, andernfalls wird der Inhalt des Parameters substituiert.
geraet=/dev/ttyd01
print ${geraet:#/dev/}
ttyd01
$ pwd
/usr/hahn/unix/ksh Hier wir nur der relative Pfad ab dem
$ echo ${PWD:#$HOME} Homedirectory ausgegeben
unix/ksh
$ cd /usr2/user/unix0
$ pwd
/usr2/user/unix0
$ echo ${PWD:#$HOME} Hier wird der gesamte Pfad ausgegeben, da
/usr2/user/unix0 der vordere Teil nicht mit $PWD übereinstimmt
remove large left pattern
${parameter:##pattern} remove large left pattern der größtmögliche passende vordere Teil soll entfernt werden. Hier wird i.d.R. mit Metazeichen gearbeitet
$ pwd
/usr/hahn/unix/ksh
$ echo ${PWD:##*/} Eignet sich gut, um den reinen Dateinamen
ksh oder das letzte Verzeichnis zu isolieren.
remove right pattern
${parameter:%pattern} remove small right pattern Wenn das pattern mit dem Ende des Inhalts von parameter übereinstimmt, so wird der vordere Teil des Parameters substituiert. Mit anderen Worten, der übereinstimmende hintere Teil wird abgeschnitten.
geraet=/dev/ttyd01
print ${geraet:%/ttyd01}
/dev
src_fln="./kto_1240_bank.txt" # Eine .txt Datei
fln=${src_fln%txt)pdf # schneide .txt ab und hänge pdf dran
xdg-open ${fln} # öffne Die Datei mit dem
# zugeordenet Programm
remove large right pattern ${parameter:%%pattern} remove large right pattern der größtmögliche passende hintere Teil soll entfernt werden Hier wird i.d.R. mit Metazeichen gearbeitet
$ x=usr/hahn/unix/ksh # Achtung kein / am Anfang
$ echo ${x:%%/*} #/gefolgt von beliebigen Zeichen
usr
Auschnitt aus Zeichenkette
Die Startposition einer Ausschnitts ${FOO:
${parameter:offset} Substring Expansion
${parameter:offset:length} Substring Expansion
Expandiert ab dem Offset zu der angegebenen Zeichenlänge
oder bis zum Ende .
length und offset sind arithmetische Ausdrücke.
Length muß; dabei zu einem Wert >= 0 expandieren.
Wenn offset negativ ist, wird er vom Ende des Parameters
verwendet.
parameter is @, the result is length positional parameters
beginning at offset.
If parameter is an array name indexed by @ or *, the result
is the length members of the array beginning with
${parameter[offset]}.
Substring indexing is zero-based unless the positional
parameters are used, in which case the indexing starts at 1.
Statt
desk=${REPLY:${#REPLY}-1:1}
hätte man also auch
desk=${REPLY: -1:1}
oder gleich
desk=${REPLY: -1}
benutzten können. Da man logisch eh den ganzen Rest haben möchte,
muss man nicht noch zusätzlich dessen Länge angeben.
BTW: Auch der Längen-Parameter darf eine *negative* Zahl darstellen.
Dann wird er nicht als Länge ab dem Start, sondern als abzuschneidene
Anzahl von Zeichen ab dem Ende interpretiert -- egal, wo der Start liegt.
${!prefix*} Expands to the names of variables whose names begin with prefix, separated by the first character of the IFS special variable.