420 Stimmen

Wie kann ich ein doppeltes Anführungszeichen innerhalb von doppelten Anführungszeichen vermeiden?

Wie kann ich doppelte Anführungszeichen innerhalb einer doppelten Zeichenfolge in Bash entkommen?

Zum Beispiel, in meinem Shell-Skript

#!/bin/bash

dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"

Ich kann nicht die ENCLOSED BY '\"' mit doppelten Anführungszeichen, um korrekt zu entkommen. Ich kann keine einfachen Anführungszeichen für meine Variable verwenden, denn ich möchte die Variable $dbtable .

20voto

Danny Hong Punkte 1414

Überprüfen Sie printf ...

#!/bin/bash
mystr="say \"hi\""

Ohne printf zu verwenden

echo -e $mystr

Ausgabe: "Hallo" sagen

Verwendung von printf

echo -e $(printf '%q' $mystr)

Ausgabe: say \"hi\"

12voto

Trisha Chatterjee Punkte 553

Verwenden Sie $"string".

In diesem Beispiel wäre das so,

dbload=$"load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"

Hinweis (aus dem Manpage ):

Eine Zeichenkette in doppelten Anführungszeichen, der ein Dollarzeichen ($"string") vorangestellt ist, bewirkt, dass die Zeichenkette entsprechend dem aktuellen Gebietsschema übersetzt wird. Wenn das aktuelle Gebietsschema C oder POSIX ist, wird das Dollarzeichen ignoriert. Wenn die Zeichenkette übersetzt und ersetzt wird, wird die Ersetzung in Anführungszeichen gesetzt.

1voto

Majal Punkte 1378

Für die Verwendung mit Variablen, die in Ihrem Bash-Skript Leerzeichen enthalten können, verwenden Sie dreifache Anführungszeichen innerhalb des Hauptzitats, z.B.:

[ "$(date -r """$touchfile""" +%Y%m%d)" -eq "$(date +%Y%m%d)" ]

-10voto

Shilv Punkte 9

Hinzufügen "\" vor dem doppelten Anführungszeichen, um es zu umgehen, statt \

#! /bin/csh -f

set dbtable = balabala

set dbload = "load data local infile "\""'gfpoint.csv'"\"" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"\""' LINES TERMINATED BY "\""'\n'"\"" IGNORE 1 LINES"

echo $dbload
# load data local infile "'gfpoint.csv'" into table balabala FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "''" IGNORE 1 LINES

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X