PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abschneiden von Zeichen aus einem String


Wayne Interessierts
21.06.2005, 16:19
Das Programm soll von einem als Parameter übergebenen String das i-te Zeichen (Parameter 2) ausgeben.
Zwischendrin habe ich ein paar Sicherheitsausgaben erstellt.
Problem: Line 19: [: peter: integer expressione expected
Und die Ausgabe von $ausgabe gibt "Der 3te Zeichen ist ter" aus.

#!/usr/bin/bash
s=$1
i=$2
j=$i

l=${#s}

echo "s=$s , i=$i , j=$j , l=$l"

while [ $i -gt 1 ]
do
s=${s#?}
echo "s=${s}"
i=$[ i - 1 ]
echo "i=${i}"
done

while [ $1 -gt $j ]
do
s=${s%?}
echo "s=${s}"
l=$[ l - 1 ]
echo "l=${l}"
done

ausgabe="Das ${j}te Zeichen ist ${s}"

echo $ausgabe



Wo liegt denn der Fehler in der zweiten While-Schleife, schließlich ist sie genauso konstruiert wie die erste Schleife, nur arbeitet sie von hinten.


butterkeks
21.06.2005, 17:01
Du testest in der zweiten schleife einen string ($1) auf größer/kleiner, was nicht geht.
Wollteste vielliehct "$i" schreiben?

Hätte da übrigens noch einen einfacheren Vorschlag:

echo "$1" | sed "s/^.\{$2\}\(.\).*\$/\1/"

verwendet allerdings sed

Wayne Interessierts
21.06.2005, 17:47
Du testest in der zweiten schleife einen string ($1) auf größer/kleiner, was nicht geht.
Wollteste vielliehct "$i" schreiben?

Hätte da übrigens noch einen einfacheren Vorschlag:

echo "$1" | sed "s/^.\{$2\}\(.\).*\$/\1/"

verwendet allerdings sed

Die zweite Schleife soll einfach sagen, daß er solange hinten abschneiden soll, bis er an der Stelle j angekommen ist.
Den sed-Befehl haben wir in der Uni noch nicht gemacht.
Ich persönlich würde es ja auch eher so lösen:



string=$1
position=$2

echo "${string}" | cut -c ${position}

exit 0


Aber ich möchte den Fehler aus der ersten Lösung wissen, denn meine Lösung schneidet ja nur das Zeichen raus, und die obere Lösung schneidet alle Zeichen ab und lässt das eine Zeichen stehen.
Also ist es das gleiche Ergebnis was angezeigt wird, aber der Weg ist ein Anderer, oder irre ich mich da?

butterkeks
21.06.2005, 18:31
Aber ich möchte den Fehler aus der ersten Lösung wissen, denn meine Lösung schneidet ja nur das Zeichen raus, und die obere Lösung schneidet alle Zeichen ab und lässt das eine Zeichen stehen.
Also ist es das gleiche Ergebnis was angezeigt wird, aber der Weg ist ein Anderer, oder irre ich mich da?

Wenn du jetzt von sed versus cut redest, dann ja (wieso bin ich eigentlich net auf cut gekommen? "Warum einfach, wenn's auch kompliziert geht...?", wie jemand mal sagte)

Wie gesagt, schätze ich einfach mal, dass du bei der zweiten while-bedingung nicht $1 (dollar-eins), sondern $l (dollar-ell) schreiben wolltest, denn das würde passen, soweit ich das erkennen kann.

$1 ist ein String und keine zahl, kann demnach so nicht bei einem größer-als Vergleich verwendet werden

Wayne Interessierts
22.06.2005, 09:12
Genau das wars, blödes Handgeschreibsel :D
Ell statt Eins und die Kiste läuft, danke sehr.