Anzeige:
Ergebnis 1 bis 8 von 8

Thema: echo mit quotes

  1. #1
    Registrierter Benutzer
    Registriert seit
    Mar 2006
    Ort
    Reiden
    Beiträge
    67

    echo mit quotes

    Ich hasse es
    Ehrlich
    ich will mir grade ein dynamische Cloningscript für meine DBs bauen und scheitere an sowas scheinbar einfachem.. ok. Also oracle braucht folgendes im Script:
    Code:
    SET UNTIL TIME "TO_DATE('21.01.2010 20:00:00', 'DD.MM.YYYY HH24:MI:SS')";
    so muss es rauskommen und ich krieg's nicht gebacken
    creating cloning script
    ./clone_PCS1M.sh: line 37: syntax error near unexpected token `('
    ./clone_PCS1M.sh: line 37: `echo "SET UNTIL TIME "TO_DATE(\'$CLONETIME\', \'DD.MM.YYYY HH24:MI:SS\')\";" >> clone_pcs1m.cmd'
    wie man sieht, hab ich's mit \ versucht, die einzelnen characters zu quoten.. aber leider ohne erfolg...
    kann mir wer helfen?
    echo "SET UNTIL TIME "TO_DATE(\'$CLONETIME\', \'DD.MM.YYYY HH24:MI:SS\')\";" >> file
    so sieht's grade aus ...
    "We are the power inside, we bring you fantasy
    we are the kingdom of light and dreams .... "
    Avantasia

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.054
    wenn Du bei echo "$string" im $string ein " hast solltest Du das natürlich ebenfalls escapen...

    also wohl so in die Richtung von
    Code:
    echo "da ist ein \" drin"
    Ich bin root - ich darf das.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Mar 2006
    Ort
    Reiden
    Beiträge
    67
    danke.. den hatte ich wirklich permanent übersehen
    "We are the power inside, we bring you fantasy
    we are the kingdom of light and dreams .... "
    Avantasia

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.054
    ich kenne ja den Rest des Scriptes nicht - evtl. aber mal über Here-Documents nachdenken oder in einem Art Template-File die notwendigen Ersetzungen mit z.B. sed machen, damit kann man manchmal solch lustige Fallstricke umgehen und es bleibt evtl. einfacher pflegbar...
    Ich bin root - ich darf das.

  5. #5
    Rain_maker
    Gast
    Kleiner "Brain Teaser" für Shellkönner/kenner (also $SOMEBODY != me):

    Code:
     echo "Da ist ein ! drin"
    Da ist ein ! drin
    Und nun wirds lustig:

    Code:
    echo "Da ist ein ! drin!"
    bash: !": event not found
    OK, dann eben escapen:

    Code:
    echo "Da ist ein ! drin\!"
    Da ist ein ! drin\!
    Hm, so wollten wir das eigentlich nicht.

    Code:
    echo 'Da ist ein ! drin!'
    Da ist ein ! drin!
    Na gut, single quotes gehen, geht vielleicht dann das hier?

    Code:
     echo "Da ist ein ! drin'!'"
    bash: !: event not found
    Jemand ne Idee, wie man das auch mit double quotes hinbekommen könnte?

    Escapen geht ja schon "irgendwie", nur dummerweise wird das Escape-zeichen "\" mit angezeigt.

    Besonders witzig finde ich das hier:

    Code:
    echo "Da ist ein ! drin\\!"
    Da ist ein ! drin\!
    Eines der \ verschwindet wie erwartet, das andere bleibt, nur wenn man eben -so wie man sich das eigentlich denken würde- nur ein "\" nimmt, bleibt das auch erhalten (siehe oben).

    Witzig auch, daß das Problem nur auftaucht, wenn sich das ! am Ende befindet.

    Getestet mit openSUSE 11.1 (bash 3.2.39) und einem Knoppix 6.2 (bash 4.0.28).

    Nachtrag:

    Und um die Verwirrung zu komplettieren (zumindest auf meiner Seite)

    Code:
    echo Da ist ein ! drin\!
    Da ist ein ! drin!
    
    echo Da ist ein ! drin!
    Da ist ein ! drin!
    Sääääääährrrrr lustick ...

    Na gut, so geht es dann doch:

    Code:
     echo "Da ist ein ! drin"!
    Da ist ein ! drin!
    Logik dahinter = großes Schulterzucken meinerseits.
    Geändert von Rain_maker (06.04.10 um 13:23 Uhr)

  6. #6
    Milchmann Avatar von m.o.o.
    Registriert seit
    May 2003
    Beiträge
    1.192
    @Rain_maker: über das Verhalten des Ausrufezeichens habe ich mich auch schon immer gewundert. Unter https://www.linuxquestions.org/quest...-marks-545662/ (bzw. irgendwo in der bash-Manpage) findet man die Erklärung.

    Gruß, Florian
    Sie können sich nicht auf Ihre eigene Ignorier-Liste setzen.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.054
    in http://ubuntuforums.org/showthread.php?t=321993 meint jemand dazu:
    In Bash, a single quote (') is referred to as a strong quote, and a double quote (") is referred to as a weak quote. Special characters aren't interpreted in a strong quote (! is a command that refers to the history in Bash IIRC), which is why you could single quote it and get the desired result. Variables, special characters and the like are interpreted in a double quote though.
    mehr habe ich noch nicht an erhellendem dazu gefunden.

    Die Kombinationen und die entsprechenden Ergenisse sind aber wirklich "strange" - ich forsche mal weiter...
    Ich bin root - ich darf das.

  8. #8
    Rain_maker
    Gast
    Also ich muss ja sagen, ich habe schon so manches Minütchen (Stündchen?) "vor man bash verbracht", aber darüber bin ich bisher noch nicht gestolpert, wobei das ein mehrfacher Stolperer sein muss, bis man es so halbwegs nachvollziehen kann.

    Code:
    Enclosing characters in double quotes preserves the literal value of all characters within the
           quotes, with the exception of $, `, \, and, when history expansion is enabled, !.
    
    ----------------------------------------
    
    HISTORY EXPANSION
    
    ------------------------------------
    
           metacharacter-separated words surrounded by quotes are considered one word.  History expansions are introduced by the appearance of the history expansion character, which is !  by  default.   Only
           backslash (\) and single quotes can quote the history expansion character.
    
           Several  characters  inhibit  history expansion if found immediately following the history expansion character, even if it is unquoted: space, tab, newline, carriage return, and =.  If the extglob
           shell option is enabled, ( will also inhibit expansion.
    
    --------------------------------------
    
           The shell allows control of the various characters used by the history expansion mechanism (see the description of histchars above under Shell Variables).
    
    -------------------------------------
    
           histchars
                  The two or three characters which control history expansion and tokenization (see HISTORY EXPANSION below).  The first character is the history expansion character, the character which sig-
                  nals the start of a history expansion, normally `!'.  The second character is the quick substitution character, which is used as shorthand for re-running the previous command entered,  sub-
                  stituting  one  string for another in the command.  The default is `^'.  The optional third character is the character which indicates that the remainder of the line is a comment when found
                  as the first character of a word, normally `#'.  The history comment character causes history substitution to be skipped for the remaining words on the line.  It does not necessarily  cause
                  the shell parser to treat the rest of the line as a comment
    Der Übersichtlichkeit halber einiges zwischen den Ausführungen im Abschnitt "HISTORY EXPANSION" entfernt, also ein klarer Fall von "in Prinzip ja" und "in der Regel ......" (hatten die Wikinger rote Bärte ... -ja ich weiß, schlechter Scherz-)

    Kurzfassung:

    Zitat Zitat von https://www.linuxquestions.org/questions/programming-9/bash-double-quotes-dont-protect-exclamation-marks-545662/
    You can turn off this annoying behaviour by setting histchars to an empty string:
    Code:
    histchars=
    //Nachtrag:

    Die "Kurzfassung" würde ich aber niemandem empfehlen, der Scripte schreibt, die möglichst portabel sein sollen, sonst läuft der Kram zwar auf der eigenen aber es knallt dementsprechend auf einer anderen Kiste.

    Greetz,

    RM
    Geändert von Rain_maker (06.04.10 um 13:55 Uhr)

Ähnliche Themen

  1. make error "collect2: ld returned 1 exit status"
    Von n4a im Forum System installieren und konfigurieren
    Antworten: 0
    Letzter Beitrag: 04.05.08, 13:44
  2. Windows Batch (.bat) in Linux verwenden /wandeln
    Von nifkaDA im Forum Linux Allgemein
    Antworten: 24
    Letzter Beitrag: 14.07.07, 07:28
  3. Kompilieren von Software-Paketen innerhalb einer chrooted Umgebung
    Von englandschorsch im Forum Kompilieren von Kernel und Sourcen
    Antworten: 16
    Letzter Beitrag: 29.05.07, 16:24
  4. Hylafax senden > keine Sendebestätigung per Email
    Von soj im Forum Anbindung an die Aussenwelt
    Antworten: 5
    Letzter Beitrag: 20.02.07, 19:39
  5. ping: sendmsg: Operation not permitted
    Von bep im Forum Router und Netzaufbau
    Antworten: 0
    Letzter Beitrag: 19.10.05, 23:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •