Kommando in Variable mit "

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Maskotchen, 31.12.2005.

  1. #1 Maskotchen, 31.12.2005
    Maskotchen

    Maskotchen Grünschnabel

    Dabei seit:
    31.12.2005
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo!

    Ich komm hier mit der bash nicht mehr weiter, folgendes Testskript:

    Code:
    a="ls datei"
    echo $a
    $a
    Das funktioniert wie erwartet, es wird ls datei ausgegeben und das gleiche dann auch korrekt als Befehl ausgeführt.

    Ich möchte nun aber, dass datei in Anführungszeichen steht, also schreib ich so:
    Code:
    a="ls \"datei\""
    # oder
    a='ls "datei"'
    echo $a
    $a
    Das echo zeigt genau das an, was ich erwarte, aber der Befehl wird dann nicht mehr korrekt ausgeführt! Doch wenn ich selbst auf der Kommandozeile ls "datei" eintippe, gehts!

    Was hat die Bash da schon wieder? $a ist doch $a oder gibts da einen Unterschied?

    --
    Steffen
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Brack

    Brack Mitglied

    Dabei seit:
    28.01.2005
    Beiträge:
    45
    Zustimmungen:
    0
    Muesste gehen mit

    eval $a
     
  4. #3 Maskotchen, 03.01.2006
    Maskotchen

    Maskotchen Grünschnabel

    Dabei seit:
    31.12.2005
    Beiträge:
    3
    Zustimmungen:
    0
    Geht aber leider auch nicht mit eval.

    Das Problem ist, dass ein dateiname mit Anführungsstrichen gesucht wird und das will ich aber natürlich nicht so.

    Ich will einfach nur zwei Anführungsstriche (doppelt oder einfach) innerhalb eines Aufrufparameters in der Variable mit drin haben.

    Vielleicht gehts nicht so einfach und man muss sowas wie xargs verwenden?

    --
    Steffen
     
  5. #4 ninguno, 03.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    also dein obiges beispiel geht mit eval schon:
    Code:
    a='ls "datei"'
    echo $a
    eval $a
    ich versteh nicht was du wirklich machen willst
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Vielleicht verstehe ich das ja falsch, aber bei mir tut Folgendes:
    Was genau tut bei Dir nicht?
     
  7. #6 Güterzug, 03.01.2006
    Güterzug

    Güterzug Mitglied

    Dabei seit:
    26.03.2005
    Beiträge:
    49
    Zustimmungen:
    0
    probier mal:
    a="ls \"datei\""
    echo $a
    $a

    so gehts in php
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Maskotchen, 03.01.2006
    Maskotchen

    Maskotchen Grünschnabel

    Dabei seit:
    31.12.2005
    Beiträge:
    3
    Zustimmungen:
    0
    Geht doch!

    Ja, sorry, mit eval gehts jetzt doch bei mir, habs nochmal getestet!

    Aber verstehen tu ich trotzdem nicht, was der Unterschied zwischen
    $a
    und
    eval $a
    sein soll!? Ich würde gerne verstehen, wie die bash arbeitet.

    Danke für eure Hilfe!
     
  10. #8 ninguno, 04.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    normalerweise wird ein eingegebenes command 1x von der shell geparsed, mit eval aber 2x. um bei deinem beispiel zu bleiben:
    Code:
    $ a='ls "datei"'
    $ echo $a
    ls "datei"
    die variable a enthält jetzt das von der shell geparste ergebnis. wie du siehst wird jetzt nach einer datei mit namen "datei" gesucht,d.h. der dateiname selbst enthält hochkommas, die hochkommas sind teil des namens.
    daher geht ein
    Code:
    $ $a
    ls: "datei": No such file or directory
    
    nicht, es gibt eben keine datei mit namen "datei"
    anders bei eval
    Code:
    $ eval $a
    datei
    
    hier wird 2x geparsed, beim ersten durchgang werden die äusseren, einfachen hochkommas entfernt, die inneren doppelten bleiben vorhanden, die sind für die shell ja quasi nicht sichtbar, weil innerhalb der einfachen hochkommas.
    danach wird noch einmal geparsed, jetzt werden die doppelten hochkommas von der shell gesehen und entfernt. ergebnis ist, dass jetzt nach einer datei namens datei gesucht wird und die ist ja wirklich vorhanden.
     
Thema:

Kommando in Variable mit "

Die Seite wird geladen...

Kommando in Variable mit " - Ähnliche Themen

  1. PHP Variable mit Systemkommando

    PHP Variable mit Systemkommando: Hallo zusammen, ich versuche eine Variable mit einem System Kommando von der Shell zu füllen. Das funktioniert auch soweit...
  2. Python checkbox in der Kommandozeile

    Python checkbox in der Kommandozeile: Guten Abend, Ich hoffe ihr hattet schöne Weihnachtstage ?! Nun ja nichts desto trotz habe ich ein oder im Verlauf mehrere Fragen :-) Einleitung:...
  3. Tiki 11.0 mit Kommandozeile und verbesserten Galerien

    Tiki 11.0 mit Kommandozeile und verbesserten Galerien: Das Tiki-Team hat seine Webapplikation Tiki Wiki CMS Groupware in der Version 11 veröffentlicht. Wie der Name schon vermuten lässt, handelt es...
  4. Tiki 11.0 mit Kommandozeile und verbesserten Gallerien

    Tiki 11.0 mit Kommandozeile und verbesserten Gallerien: Das Tiki-Team hat seine Webapplikation Tiki Wiki CMS Groupware in der Version 11 veröffentlicht. Wie der Name schon vermuten lässt, handelt es...
  5. find-Kommando: Frage zu Tests und logischen Operatoren

    find-Kommando: Frage zu Tests und logischen Operatoren: Hallo zusammen, folgende Aufgabenstellung: Ich suche Dateien, die entweder zur group "mygroup" oder dem User "myuser" gehören. Die Dateinamen...