Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Linux/UNIX Linuxverfechter finden hier Weggefährten.

Bash Scripting: Contexts

Diskussion: Bash Scripting: Contexts im Forum Linux/UNIX, in der Kategorie Operating Systems; Anzeige Hi, von Perl kenne ich das Prinzip von Contexts im Zusammenhang mit skalaren Variabeln. Ist das in Bash auch ...

Antwort
Alt 18.05.09, 09:24   #1 (permalink)
Senior Member
 
Registriert seit: 26.03.06
Serow Leistung: 8086
Likes: 16
Standard Bash Scripting: Contexts

Anzeige

Hi,

von Perl kenne ich das Prinzip von Contexts im Zusammenhang mit skalaren Variabeln. Ist das in Bash auch so? Der folgende Ouput macht mich etwas stutzig:

Code:
mathias@wizard:~$ NUM="text"
mathias@wizard:~$ echo $(( $NUM + 1 ))
1
mathias@wizard:~$ TEXT="some text"
mathias@wizard:~$ echo $(( $TEXT + 4 ))
bash: some text + 4 : syntax error in expression (error token is "text + 4 ")
mathias@wizard:~$ echo $(( $TEXT + 1 ))
bash: some text + 1 : syntax error in expression (error token is "text + 1 ")
mathias@wizard:~$ NUM="text"
mathias@wizard:~$ echo $(( $NUM + 1 ))
1
mathias@wizard:~$ NUM="text "
mathias@wizard:~$ echo $(( $NUM + 1 ))
1
mathias@wizard:~$ echo $(( $NUM + 2 ))
2
mathias@wizard:~$ echo $(( $NUM + 4 ))
4
mathias@wizard:~$
Warum kommt mit NUM ein Wert raus bei der arithmetischen Operation und mit TEXT ein Fehler? Entweder ist das komisch oder ich bin gerade total daneben ...

cu
serow
Serow ist offline   Mit Zitat antworten
Alt 18.05.09, 10:16   #2 (permalink)
Moderator
 
Benutzerbild von xeno
 
Registriert seit: 09.09.04
xeno Leistung: Pentium Ixeno Leistung: Pentium I
xeno eine Nachricht über ICQ schicken
Likes: 76
Standard

dann scheint die bash entweder $num oder $text selber zu verwenden, vermute ich mal.

zsh:
Zitat:
xeno@galahad:~ ? NUM="text"
xeno@galahad:~ ? TEXT="text"
xeno@galahad:~ ? echo $(( $NUM + 2 ))
2
xeno@galahad:~ ? echo $(( $TEXT + 2 ))
2
xeno ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.05.09, 10:23   #3 (permalink)
Senior Member
Themenstarter
 
Registriert seit: 26.03.06
Serow Leistung: 8086
Likes: 16
Standard

Hi,

also bei mir geht dein Beispielcode genau wie bei dir, aber scheinbar hat er ein Problem mit white spaces!?!

Code:
mathias@wizard:~$ NUM="text"
mathias@wizard:~$ TEXT="text"
mathias@wizard:~$ echo $(( $NUM + 2 ))
2
mathias@wizard:~$ echo $(( $TEXT + 3 ))
3
mathias@wizard:~$ TEXT="text with spaces"
mathias@wizard:~$ echo $(( $TEXT + 3 ))
bash: text with spaces + 3 : syntax error in expression (error token is "with spaces + 3 ")
mathias@wizard:~$
cu
serow
Serow ist offline   Mit Zitat antworten
Alt 18.05.09, 10:38   #4 (permalink)
Moderator
 
Benutzerbild von xeno
 
Registriert seit: 09.09.04
xeno Leistung: Pentium Ixeno Leistung: Pentium I
xeno eine Nachricht über ICQ schicken
Likes: 76
Standard

in der tat...

Zitat:
xeno@galahad:~ ? NUM="foo bar "
xeno@galahad:~ ? echo $(( $NUM + 2 ))
zsh: bad math expression: operator expected at `bar + 2 '
er meckert aber nur, wenn er zwei strings findet. sowas wie " foo " geht ohne probleme. und ich kann dir echt nicht sagen warum das so ist
xeno ist offline   Mit Zitat antworten
Alt 18.05.09, 15:36   #5 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Zitat:
Original von xeno
er meckert aber nur, wenn er zwei strings findet. sowas wie " foo " geht ohne probleme. und ich kann dir echt nicht sagen warum das so ist
Ich würde sagen, der Bash fehlt da ein Rechenzeichen zwischen den beiden Strings. $(( 1 2 + 3)) würde ja auch nicht wirklich Sinn machen.
Wenn nur ein Space am Ende ist, dann macht das natürlich nichts, da dann kein zusätzlicher Operand hinzukommt.

Was ich merkwürdig finde ist, dass die Bash überhaupt mit Strings rechnet.
Eydeet ist offline   Mit Zitat antworten
Alt 18.05.09, 16:05   #6 (permalink)
Moderator
 
Benutzerbild von xeno
 
Registriert seit: 09.09.04
xeno Leistung: Pentium Ixeno Leistung: Pentium I
xeno eine Nachricht über ICQ schicken
Likes: 76
Standard

stimmt, liegt auf der hand eigentlich. und warum sie mit strings rechnen kann führe ich mal darauf zurück, dass alles was nicht int ist einfach 0 ist.
xeno ist offline   Mit Zitat antworten
Alt 18.05.09, 19:55   #7 (permalink)
Senior Member
Themenstarter
 
Registriert seit: 26.03.06
Serow Leistung: 8086
Likes: 16
Standard

Zitat:
Original von xeno
stimmt, liegt auf der hand eigentlich. und warum sie mit strings rechnen kann führe ich mal darauf zurück, dass alles was nicht int ist einfach 0 ist.
Richtig - deswegen würde ich ja vermuten, dass "text" + 1 nicht anders behandelt wird als "some text" + 1 - einfach weil alles was kein Integer ist (some text) 0 ist

Bash scripting ist das bescheuertste was mir je untergekommen ist ...

cu
Mathias
Serow ist offline   Mit Zitat antworten
Alt 18.05.09, 19:58   #8 (permalink)
 
Registriert seit: 07.03.08
90nop Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Bash scripting ist das bescheuertste was mir je untergekommen ist ...
, hey, da brutzelt auch nicht gleich die CPU durch, wenn beim ausführen ein Datentypenkonflikt besteht. Bei C z.B. hat sowas halt weitreichernde Folgen. Die Bashleute sehen das viel lockerer. *g
90nop ist offline   Mit Zitat antworten
Alt 18.05.09, 21:04   #9 (permalink)
Senior Member
Themenstarter
 
Registriert seit: 26.03.06
Serow Leistung: 8086
Likes: 16
Standard

Ja und dann kommt so Blödsinn wie oben zustande Naja ...
Serow ist offline   Mit Zitat antworten
Alt 19.05.09, 00:42   #10 (permalink)
 
Registriert seit: 29.12.07
linuxerr Leistung: Facit NTK
Likes: 0
Standard

vielleicht hilft euch ja das lesen der man-pages ;-)

wie xeno schon schrieb, tritt das problem bei mehreren worten auf.
nicht konvertierbare texte werden mit 0 gleich gesetzt, sind mehrer worte durch metazeichen getrennt, dann ist der ausdruck durch die substitution arithmetisch unsinnig und wird mit einer fehlermeldung quittiert. was daran bescheuert sein soll erschliesst sich mir nicht......
linuxerr ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Operating Systems » Linux/UNIX » Bash Scripting: Contexts
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
bash scripting (forschleife + if anweisung) weau Linux/UNIX 9 19.02.11 01:31
shoutcast scripting (Job) devilofcrash (Web-) Design und webbasierte Sprachen 1 08.05.09 19:04
zu Mirc scripting b3n4 Code Kitchen 4 18.05.05 13:51
Cs scripting derdicke Games 0 08.01.04 19:24
Shell Scripting AlanBraxe Code Kitchen 5 25.01.02 21:07


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61