Ahoi!
Ich würde gern eine ganze Text-Datei in einer Bash-Variable speichern, damit ich die in dem betreffenden Script nicht jedes Mal neu einlesen muss. Gibt es eine Möglichgkeit das zu tun, ohne, dass die Zeilenumbrüche verlorengehen?
Ahoi!
Ich würde gern eine ganze Text-Datei in einer Bash-Variable speichern, damit ich die in dem betreffenden Script nicht jedes Mal neu einlesen muss. Gibt es eine Möglichgkeit das zu tun, ohne, dass die Zeilenumbrüche verlorengehen?
Code:#!/bin/bash VAR="$(cat datei.txt)" echo "Zweite Zeile von datei.txt:" echo "$VAR" | sed -n '2p'
Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB
Funktioniert bei mir nicht. Die Datei wird von vornherein als Einzeiler in der Variable gespeichert.
a.k.a.:
Code:# VAR=$(cat file) # echo $VAR | grep -c . 1
Geändert von DerAufgeklUser (06.06.08 um 14:40 Uhr)
Code:# VAR=$(cat file) # echo "$VAR" | grep -c . 103
Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB
Öhm... okeh. Was machst du anders? Die Befehle sind die selben und meine Testdatei hat definitv mehrere Zeilen.
Debian EtchCode:# bash --version GNU bash, version 3.1.17(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
Code:# echo $VAR | hexdump 0000000 7365 6220 6665 6e69 6564 206e 6973 6863 0000010 6d20 6865 6572 6572 7a20 6965 656c 206e 0000020 6e69 6420 6569 6573 2072 6164 6574 0a69 0000030 # hexdump file 0000000 7365 620a 6665 6e69 6564 206e 6973 6863 0000010 6d0a 6865 6572 6572 7a0a 6965 656c 0a6e 0000020 6e69 6420 6569 6573 0a72 6164 6574 0a69 0000030
Geändert von DerAufgeklUser (06.06.08 um 15:15 Uhr)
Die Befehle sind nicht exakt gleich. Sieh mal die zweite Zeile genauer an..
Aha, so funktionierts bei mir auch. Oder wenn ich IFS wieder auf " " setze. Den hatte ich auf "
". Merkwürdig.
Danke!
Wenn Du in der Bash keine Anführungszeichen verwendest, wird der String als Wordlist interpretiert. Damit wird jeglicher White Space (Leerzeichen, Tabulator und sogar Linefeeds - genaueres in Variable IFS) weggenommen und bei der Ausgabe nur durch ein Blank zwischen den Worten ersetzt. Damit werden auch führende Leerzeichen entfernt.
Für das Filehandling ist das im Allgemeinen praktisch, beim Stringhandling muss man halt darauf aufpassen, immer Anführungszeichen zu verwenden.
Einfaches Beispiel:
ThomasCode:> echo "das ist ein test" das ist ein test > echo das ist ein test das ist ein test
Lesezeichen