Nehmen wir also an, ich habe das folgende Muster:
Thisisatest="1"
in einer Datei namens file
.
Und ich möchte diegenauZeichenfolge obenAberaus irgendeinem Grund entscheide ich mich, einige Zahlen aus einer Liste zu durchlaufen, diese als Variable zu verwenden und Folgendes zu tun:
Thisisatest="$varhere"
Wobei das Obige $varhere
gleich der Zahl oben ist, also 1
. (während ich die Schleife über die Zahl erwähnte,Daswar nur ein zukünftiger möglicher Anwendungsfall hierfür und bleibt ein Beispiel)
Um es einfacher zu machen, sagen wir, ich möchte das obigegenauMusterwährendVerwenden Sie die obige Variable und ihren Inhalt:
grep 'Thisisatest="$varhere"' file
Wobei die Datei die Zeichenfolge Thisisatest="1"
und $varhere
die Zahl enthält 1
.
Das Problem ist, dass das nicht funktionieren würdeWeilEine Variablenerweiterung erfolgt nicht, wenn sie zwischen einfachen Anführungszeichen steht (wie oben).
Hier der gescheiterte Versuch dem entgegenzuwirken:
- Ersetzung von Inhalten durch Variablensubstitution
echo "${varhere/[0-9]*/Thisisatest=\"$varhere\"}"
Hier verwende ich echo
, um zu sehen, ob es dieRechtsZeichenfolge, sodass sie als Eingabe für grep verwendet werden kann ... stattdessen wird Folgendes ausgegeben:
'Thisisatest="'1'"
- Weitere Zitate hinzufügen
echo "'Thisisatest="${varhere}"'"
Ausgabe:
'Thisisatest='1''
echo ''''Thisisatest=\"${varhere}\"''''
Ausgabe:
Thisisatest="'1'"
Der Rest ist offensichtlich ... Nun, der allerletzte Versuch oben scheint dem nahe zu kommen, was ich will, ist es aber immer noch nicht.
Gibt es eine Möglichkeit, das oben genannte zu tun?
Antwort1
grep "Thisisatest=\"${varhere}\""
funktioniert bei mir. " \
" schaltet die Flagge „Ich bin ein Sonderzeichen“ des folgenden Zeichens durch EINE Shell-Interpretation um.