Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
bash kommandosubstitution

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 17:16   Titel: bash kommandosubstitution

hi,
manchmal ist mir die shell ein raetsel, ich kriegs zwar zum laufen, weiss aber nicht warums laeuft.
Vielleicht koennt ihr mir ja hiermit helfen:
ist ein beispiel aus einem shell-buch
es gibt 4 dateien in einem verzeichnis:
u mit dem inhalt "uv"
uv mit dem inhalt "uvw"
uvw mit dem inhalt "uvwx"
uvxw mit dem inhalt "langer satz"
plumpes beispiel, erfuellt aber seinen sinn:
cat `cat \`cat \\`cat u\\`\``
gibt jetzt den inhalt von uvwx aus.
mein problem ist, dass ich
cat `cat \`cat \`cat u\`\``
erwartet haette. Ich frag mich wo das dritte \ her kommt in der innersten klammer! Ich hab schon nen knoten im hirn.
gruss hug.
 

ratte
Gast





BeitragVerfasst am: 16. Jul 2001 18:50   Titel: Re: bash kommandosubstitution

hi, ich versteh gar nix hier...

haste geprueft, ob das forum alles so darstellt, wie du's eingegeben hast?

zur info: im *nix gilt "\" als escapezeichen, d.h. zeichen, die als befehl oder steuerzeichen interpretiert wuerden, gelten als zeichen. dasgleiche passiert hier im forum auch:

wenn du [ schreiben willst, musst du "\[" schreiben! denn das [ leitet eine formatierung ein
... um diese Zeile darzustellen wie beabsichtigt, musste ich "\[" und "\\\[" verwenden usw.

ratte
 

hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 19:12   Titel: Re: bash kommandosubstitution

yup, habe ich verpennt, das escape zeichen ist mir klar, aber in verschachtelten kommandosubstitutionen bringts mich schonmal durcheinander, ist ganz wie rekursive schleifen (bei kleinen prograemmchen die fakultaet berechnen zB, und da gabs ja noch das 8 Damen problem), ich denk mir nen knoten ins hirn

und die forumsoftware hat wirklich verschluckt, aber auf seltsame weise, however, jetzt der richtige code:
code:

cat `cat \`cat \\\`cat u\\\`\``



ich dachte das quote oder code tag des forums, wuerden wirklich literal posten, tja jetzt muss ich halt 5 \ machen um 3 \ wieder zu geben. Aber damit hab ichs dann auch kapiert. Ich hatte mich gewundert, dass man 3 statt 2 verwendet, aber man muss ja 3 nehmen, weil 2 ja zu einem aufgeloest werden und dann das ` allein da steht und seine sonderbedeutung behaelt.

gruss hug.
 

hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 19:37   Titel: Re: bash kommandosubstitution

achja, was die verschachtelung angeht (fast ne mathematische frage), immer wenn man eine ebene tiefer schachtelt, 'vermehren' sich auch die escape zeichen (\) und zwar immer nach dem schema x2+1 pro ebene. Das ist wahrscheinlich super banal, aber ich kanns mir gut merken!
gruss hug.
 

Jochen
Gast





BeitragVerfasst am: 16. Jul 2001 21:13   Titel: Re: bash kommandosubstitution

Und damit man sich die Mühe gar nicht erst machen muss, sollte man in der bash und in der ksh (und damit wahrscheinlich zsh auch) anetslle von Backticks (`command`) einfach die Schreibweise $(command) verwenden. Damit wird dann aus Deinem Beispiel einfach
code:

cat $(cat $(cat $(cat u)))


Das innerste "cat u" gibt "uv" aus, womit das zweitinnerste cat den Inhalt der Datei uv ausgibt. Das ergibt "uvw", dessen Inhalt das dritte cat ausgibt, was uvwx macht. Das letzte cat gibt den Inhalt der Datei gleichen Namsn aus und das ist dann "langer Satz".

Aber nicht unbedingt eine empfehlenswerte Methode, so einem Command Substitution nahe bringen zu wollen. In der bash/ksh ist die Schreibweise mit $() einfachen, und in der sh kann man die Backticks nicht schachteln und muss zu Backslash-Orgien greifen. Fazit: Man lässt es oder arbeitet mit eval.

Jochen
 

hugenay
Gast





BeitragVerfasst am: 16. Jul 2001 21:38   Titel: Re: bash kommandosubstitution

das ist natuerlich ne gute idee. Da ja in beiden faellen die shell die zeile nur durchgeht und substituiert bzw. sogar mehrfach, ist das ja geschwindigkeitsmaessig auch identisch.
Ich schau mir gerade aber die Bourne shell an, und da hab ich die backtick loesung verwenden muessen. Was (das beispiel laesst sich ja leicht erweitern) tatsaechlich zu zeilenweisen backticks fuehrte


In der bash/ksh ist die Schreibweise mit $() einfachen, und in der sh kann man die Backticks nicht schachteln und muss zu Backslash-Orgien greifen.

statt Backticks meinst du hier doch die $() loesung, oder? Backticks, wenn ich das wort richtig verstehe, kann man in der Bourne shell ja schon schachteln, nur eben mit backslashes.

Haste eigentlich mal mit dem Gedanken gespielt, was ueber die Shells zu schreiben? Gibt zwar viel zu dem thema, aber in den detail spart man sich oft gerne aus.
 

Jochen
Gast





BeitragVerfasst am: 17. Jul 2001 12:58   Titel: Re: bash kommandosubstitution

Tatsache, mit den Backslash-Backticks geht's mit dem Schachteln! Trotzdem 'ne kranke Syntax...

Ne ne, mit Backticks meinte ich schon das "`"-Zeichen für die Kommando-Substitution in der Bourne-Shell. Aber da war ich im Irrtum. Hm, da diese Konstruktion aber write-only ist (man kann's einmal schreiben, aber nie mehr lesen und verstehen ), würde ich selbst in der sh anders vorgehen:
code:

A=`cat u`
B=`cat $A`
C=`cat $B`
cat $C


Aber man lernt halt nie aus.

Hm, was dazu schreiben? Tja, das ist so 'ne Sache. Ich halte zwar auch Lehrgänge zu dem Thema, benutze dazu aber eine vorgegebene Unterlage. Die kann/darf ich hier nicht publizieren, ausserdem ist sie auch nicht gut . Da ich aber momentan mit Linux-Admin-Kursen ausgelastet bin (4 Wochen im Jahr halte ich Lehrgänge im UNIX/Linux-Umfeld), passe ich lieber da meine Unterlagen an, mit denen ich die wiederum vorgegebene (wiederum schlechte) Vorlage ergänze.

Was schwebt Dir denn vor? Allgemeines? Eine FAQ zur Shell? Zu welcher?

Hmmm, da fällt mir ein, zu Regulären Ausdrücken im Shell-Umfeld (expr, sed, grep, also die einfache Variante) habe ich mal einen Crashkurs zusammengeschrieben. Ist an so was Interesse da? Müsste aber noch mal überarbeitet werden...
 

hugenay
Gast





BeitragVerfasst am: 17. Jul 2001 13:32   Titel: Re: bash kommandosubstitution

Gute Idee mit den Variablen, klaut nur nen bisserl speicher. Steht in der manpage eigentlich, wieviel Speicher fuer ne $ Variable in Anspruch genommen wird von der bash bzw. sh? Muss ich mal nachschauen wenn ich daheim bin.

Hab mal grob nach shell infos gegoogelt. Auch auf deutsch gibts auf fast jeder url, die irgendwas mit unix/linux zu tun, was zur shell. Scheint mir uebersaettigt zu sein. Selbt buecher gibts auf deutsch schon einige. Bin aber ueberrascht, wie schlecht das buch von addison&wesley ist (helmut herold, das buch ist didaktisch katastrophal, infos hats genug!). Ne zwingende Idee (fuer ne url zB) fehlt mir aber gerade, muss zuviel arbeiten zZ -:)

Bin aber sehr an deinem crash kurs interessiert, bin auch mit ner raw-version zufrieden -Smile
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy