2017-11-03 15 views
-3

Ich habe eine SQL-Abfrage, die enthält:Warum ersetzt sed meine Anführungszeichen?

join (&max_dt1) t3 

ich &max_dt1 so ersetzen möchten:

MAX_DT1="'2017-11-03'" 
REPLACE="sed -i 's/&max_dt1/select ($MAX_DT1) as dt/g' $FINAL_QUERY" 
cat $FINAL_QUERY | eval $REPLACE 

Ergebnis:

join (select (2017-05-09) as dt) t3 

Warum ist es die Anführungszeichen meiner Variable löschen MAX_DT1?

Mein richtiger Code:

MAX_DT1="'$MAX_DT1'" 
echo $MAX_DT1 
REPLACE="sed -i 's/&max_dt1/select ($MAX_DT1) as dt/g' $FINAL_QUERY" 
echo sed -i "s/&max_dt1/select ($MAX_DT1) as dt/g $FINAL_QUERY 
cat $FINAL_QUERY | eval $REPLACE 

MAX_DT1 allererst enthält nur: 2017-11-03

+0

Was Anführungszeichen? echo $ MAX_DT1 und überprüfe die Ausgabe. – dood

+0

Oh, oder ist die Frage, warum es '2017-05-09' statt' '2017-05-09'' ist? –

+0

sollte es nicht '2017-11-03' sein, warum ändert sich das Datum? – karakfa

Antwort

1

Zitate zeigt an, dass Sie eine Zeichenfolge beeinflussen Variable MAX_DT1 . Es ist nicht Teil Ihrer Zeichenfolge. Wenn Ihr Variablenwert Anführungszeichen enthalten muss, müssen Sie sie hinzufügen. Zum Beispiel:

MAX_DT1="'2017-11-03'" 

Leider wird der nächste REPLACE Variable nicht haben, was Sie erwarten und die später genannt eval Befehl wird nicht funktionieren, da seine sed Befehl formatiert schlecht wäre (wenn Sie Ihren Code halten diese Weg).

Glücklicherweise Ihr Problem gelöst ist, wenn Sie auf diese Weise direkt den sed Befehl aufrufen:

MAX_DT1="'2017-11-03'" 
sed -i "s/&max_dt1/select ($MAX_DT1) as dt/g" $FINAL_QUERY 
2

folgen dieses

$ query="join (&max_dt1) t3" 
$ MAX_DT1="'2017-11-03'" # <--- you have to quote the single quotes!! 
$ sed "s/&max_dt1/select ($MAX_DT1) as dt/g" <<< $query 

join (select ('2017-11-03') as dt) t3 
+0

Ich mache dies und es funktioniert nicht: – user3637887

+0

beachten Sie, dass doppelte Anführungszeichen die einfachen Anführungszeichen umhüllen! – karakfa

+0

Ihre Bewertung ist nicht sauber, Sie haben bereits 'sed' Skript mit einfachen Anführungszeichen zitiert, die gleiche Art von Anführungszeichen kann nicht verschachtelt werden, ohne zu entkommen. Folge einfach meinem Beispiel. – karakfa

Verwandte Themen