Hallo zusammen,
ich sitze zur Zeit vor einem kleinen Skript, welches mir einen eingelesenen String auswertet und abhängig von diesem Ergebnis eine Textdatei schreibt. Konkret geht es darum, die Datei captions.txt zu erzeugen, die vom Perl-Skript album (siehe [1]) wiederum verarbeitet wird.
Mein Skript kann unter [2] runter geladen werden, ich packe hier nur den interessanten Abschnitt mit der Funktion “captions()” rein:
# captions() will ask for image descriptions
# and append them to an captions.txt file within the
# PWD directory.
# An leading “#” character in a lign will tell album
# to exclude this image to the album generation.
captions()
{
IMAGE=$1
if [ -f captions.txt ];
then
echo “file exists” > /dev/null
else
touch captions.txt
fi
# if-then-else checks, if captions.txt
# is already available
# If not, then create captions.txt file!
echo -en “\n\nInsert your comment to the image here: “
read comment
COMMENT=${comment}
# IMAGE_DATE= Read from EXIF info pool
# COMMENT=$IMAGE_DATE” – “$COMMENT
TEST01=`echo $COMMENT | awk ‘{print $1}’`
# awk expects the “#” character on first position,
# followed by an blank.
if [ $TEST01 = “#” ]; then
echo “Image will be hidden in album”
else
TEST01=””
fi
COMMENT=$TEST01$IMAGE” “$COMMENT
echo $COMMENT >> captions.txt
}
Wie man sieht, ist schon ein wenig gefummelt worden zum testen ($TEST01 etc.)
Ich möchte einen Kommentar einlesen und prüfen, ob das erste Zeichen ein #-Zeichen ist! – Wenn ja, handelt es sich laut der Convention der Datei captions.txt um ein Bild, was später beim Erzeugen des Albums ausgelassen wird!
Die Zeile, die in die Datei captions.txt geschrieben werden soll, ist folgend aufgebaut (siehe Abschnitt 2 unter [1]):
Dateiname.jpg [Tab] Kommentar oder
#Dateiname.jpg [Tab] Kommentar Nun brauch ich aber kein Leerzeichen in dem String, sondern möchte eben diesen Tabstop schreiben! – Wie geht dies?
Vielen Dank vorweg,
Marcus Fischer
[1] http://marginalhackers.com/Hacks/album/Docs/Section_2.html
[2] http://marcusfischer.com/Ablage/image_orientation.sh
Ich würde es mit “\t” versuchen (vergleiche den Abschnitt Quoting in man bash).
Eine Unstimmigkeit ist mir in deinem Posting aufgefallen:
In deinem Script kommentierst du:
# awk expects the “#” character on first position,
# followed by an blank.
In deinem posting schreibst du:
Dateiname.jpg [Tab] Kommentar oder
#Dateiname.jpg [Tab] Kommentar
Nur eins von beiden kann stimmen.
(Aber das nur so am Rande.)
Hallo man-draker, danke für den Tipp!
Die Unstimmigkeit ist schon richtig, ich hole mir mittels awk an der Stelle $1 das erste “Word” raus. Und daher brauche ich ein einzelnes #-Zeichen um zu erkennen, ob die Zeile auskommentiert wird oder nicht.
Der Dateiname wird auch nicht von mir eingegeben sondern später davor bzw. dazwischen gesetzt, aber dann halt mit einem Tabstop nach dem Dateinamen! So, ich habe nun in die Bash-Manpage geschaut und komme leider nicht weiter, es funktioniert nicht wie gewünscht. Ich hatte auch hier im Forum einen ähnlichen Fall gefunden und bereits ausprobiert:
Weder COMMENT=$TEST01$IMAGE$’\t’$COMMENT noch
COMMENT=$TEST01$IMAGE”$’\t’”$COMMENT
brachten mich richtig weiter. Und Ebenfalls \x09 nicht, der Hexcode für ASCII laut einem RegExpr-Manual was vor mir liegt.
Wie muss die Zeile lauten, damit das Charakter geschrieben wird?
echo “A”$’\t’”BB”$’\t’”CCC” jedenfalls funktioniert. Das ist aber die gleiche Syntax wie meine obere Zeile :-?
Gruß,
Marcus
Ok, habe noch einen Test gemacht. Es scheint nicht zu funktionieren mit Variablen, die ich setzen möchte! [marcus@mfclient ~]$ TEST01=AA$’\t’BB
[marcus@mfclient ~]$ echo $TEST01
AA BB
[marcus@mfclient ~]$ echo AA$’\t’BB
AA [tab] BB
Merkwürdig, oder? — Ist die Bash an dieser Stelle ggf. eingeschränkt?
probiers mal mit:
[marcus@mfclient ~]$ TEST01=AA$’\t’BB
[marcus@mfclient ~]$ echo “$TEST01”
Die Variable wurde richtig gesetzt, Dein Problem ist die Eigenschaft von echo, das jedes Argument Space-separiert ausgibt.
Gruss, Uli
Ulrich, dein Tipp war Gold wert! Vielen Dank!!!
Jetzt läuft es wie gewünscht!
Gruß,
Marcus