Suche

 

Aktuelle Beiträge

Working with Citrix in...
I have the comfort of working in a Unix Environment,...
cptsalek - 7. Okt, 16:04
U60: CPUs defekt
Habt Ihr Euch schonmal an einem Problem scheinbar die...
cptsalek - 1. Okt, 18:45
Timekeeper für Sun...
Seit einigen Jahren steht bei mir eine Sun IPX in der...
cptsalek - 1. Okt, 09:54
Meine Ultra60 will nicht
Nach den beiden Erfolgserlebnissen mit meiner Octane...
cptsalek - 1. Okt, 09:18
Es geht! Ich werde nicht...
Meine Octane hat ihre Installation überlebt! Ich...
cptsalek - 29. Sep, 23:22

Credits

Knallgrau New Media Solutions - Web Agentur für neue Medien

powered by Antville powered by Helma


Creative Commons License

xml version of this page
xml version of this page (summary)
xml version of this page (with comments)

twoday.net AGB

Archiv

Februar 2007
Mo
Di
Mi
Do
Fr
Sa
So
 
 
 
 2 
 3 
 5 
 9 
10
11
13
14
15
16
17
18
19
20
22
25
26
28
 
 
 
 
 

Status

Online seit 1034 Tagen
Zuletzt aktualisiert: 7. Okt, 16:05

Counter & Co.

Egoload - Verträumter Idealist
Mein
Koordinaten auf der EgoMap:  93,2
100% Heidnisch

Locations of visitors to this page

Muschelspaß

Ich weiß garnicht mehr wie, aber vor einer Weile bin ich über die zsh gestolpert. Und seitdem ist diese höchst komfortable und genial programmierbare Shell zu meinem Standard geworden.
Mäuschenschubser können an dieser Stelle übrigens aufhören zu lesen. ;-)

Warum?
Also da wäre z.B. die ZSH-Liebhaberseite.
Eigentlich ist damit auch schon alles gesagt, meine Favoriten sind
  • Arrays
  • Assoziative Arrays ("Hashes")
  • Positionsparameter in Strings
  • Mächtige Parameter/Command/Argument-Expansion
Hier mal einige Beispiele:

typeset -a array
array=( "${(f)$(ls -l)}" )
Diese kleine Codezeile liest die Ausgabe des ls-Befehls in ein Array ein, und zwar Zeilenweise. Ein spezielles Konstrukt gibt es für Dateien, mit dem man auf cat verzichten kann:

typeset -a array
array=( "${(f)$(< dateiname)}" )
Das funktioniert zwar hervorragend, entfernt aber alle Leerzeichen, die in der Datei vorkommen. So lange man das File nur lesen will ist das in Ordnung, wenn man es aber verarbeiten und die neue Fassung wieder ausgeben möchte, ist das ein K.O-Kriterium. Hier funktioniert dann sowas wie:

typeset -a array
< ldap_user_passwd while { read line } { content+=$line$'\n' }
Die Konstruktion stammt von der zsh-Users Liste, und hat nach einem kurzen Test den Nachteil, dass hier an jede Zeile ein zusätzliches \n angehängt wird. Also:

typeset -a array
< ldap_user_passwd while read line
do
  if [[ $array == "" ]] then
   array+=" "
  else
    array+=$line
  fi
done
Die if-then Geschichte kann man mit der zsh auch nett umgehen:

[[ $array == "" ]] && { array+=" " } || { array+=$line }

Wie gesagt kennt die zsh nicht nur Strings, sondern auch Arrays. Daher werden Strings auch anders verarbeitet. Die Zeichenkette
string="Hallo Welt" wird z.B. in einer Schleife nicht in die Elemente "Hallo" und "Welt" zerlegt, wie das bei sh-kompatiblen Shells der Fall ist.
Erst wenn man das mal verwendet hat um wie schon gesagt zeilenweise Dateien zu verarbeiten, merkt man, wie nützlich das ist.
Apropos nützlich:

for line in $array
do
  [[ $line == *${suchwort}* ]] && { echo "Suchbegriff gefunden." }
done
Find ich genial... :-)
Und wo wir gerade bei genial sind, hier ein Beispiel für die Positionsparameter:

% typeset -a array
% array=( Hallo Welt )
% echo ${array[1]}
Hallo
% echo ${array[2]}
Welt
% echo ${${array[2]}[1]}
W
More to come. :-)

Trackback URL:
http://cptsalek.twoday.net/stories/3374010/modTrackback


...wenn man trotzdem lacht
Atari Mega ST
Auf Arbeit
Bloggen
Bookmarks & Links
BSD
Bundeswehr
CCC07
Computing
Datenschutz
Fundsachen
G8
Garten
Gentechnik
Glaube
HartzIV
... weitere
Profil
Abmelden
Weblog abonnieren