ubuntuusers.de

Bash: Problem mit echo-Kommando in Variablen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

illinux

Anmeldungsdatum:
19. Oktober 2007

Beiträge: Zähle...

Hallo Shell-Gurus 😉

Folgendes Problem: Ich möchte den String "-e foo" von echo ausgeben lassen. Das funktioniert aber nicht, wenn ich den Befehl in eine Variable schreiben will:

1
2
$ string=$(echo "-e foo"); echo $string
$ foo

Wie ihr sehen könnt, fehlt das '-e'. Es wird von der Bash wohl als Option zu 'echo' interpretiert. Wie kann ich das umgehen?

Viele Grüße,

illinux

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Hi,

setze mal doppelte Anführungszeichen um $string herum:

$ string="-e foo"
$ echo "$string"
-e foo

Randnotiz: Das ist nicht allgemein gültig. Bei den meisten anderen Befehlen muss man die Parameterliste mit zwei Minuszeichen abschließen. Beispiel:

$ mkdir '-e blabla'
mkdir: invalid option -- 'e'
Try `mkdir --help' for more information.
$ mkdir -- '-e blabla'
$ cd -- '-e blabla'
$ pwd
/tmp/-e blabla

echo interessiert sich aber nicht für so zwei Dashes. Führt zu der Frage, wie man wohl ein einfaches -e ausgeben kann?

illinux

(Themenstarter)

Anmeldungsdatum:
19. Oktober 2007

Beiträge: 46

Danke Vain, Du hast mich vor'm verrückt werden bewahrt 👍

Eine Kleinigkeit noch: Folgendes Skript soll die Datei kresir.org in Emacs öffnen und den String "Forderung" suchen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

skriptdir=/media/Daten/ARCHIV/Skript

skript=kresir.org
key=Forderung

string1="-c -e '(find-file \"$skriptdir/$skript\")'"
string2="-e '(beginning-of-buffer)'"
string3="-e '(search-forward \"$key\")'"
string=$(echo -e $string1 $string2 $string3)
echo $string
emacsclient $string

Die Datei wird nicht geöffnet und Emacs wirft folgende Fehlermeldung aus:

*ERROR*: End of file during parsing

Am Terminal wird die Datei anstandslos geöffnet:

1
emacsclient -c -e '(find-file "/media/Daten/ARCHIV/Skript/kresir.org")' -e '(beginning-of-buffer)' -e '(search-forward "Forderung")'

Also kann es nicht daran liegen, das $string einen Fehler enthält. Irgendeine Idee?

Viele Grüße,

illinux

illinux

(Themenstarter)

Anmeldungsdatum:
19. Oktober 2007

Beiträge: 46

OK, ich hab's!

Für Interessierte:

1
emacsclient -c -e "(find-file \"$skriptdir/$skript\")" -e "(beginning-of-buffer)" -e "(search-forward \"$key\")"
Antworten |