2016-03-24 10 views
1

Ich habe Probleme mit der Erweiterung von Variablen und ignorieren ihre Schrägstriche.Beendet Forward-Schrägstrich in Bash-Variablen

Ich habe ein einfaches Skript geschrieben, das Text in meinem Git-Repository findet und durch anderen Text ersetzt. Das funktioniert gut, aber jetzt möchte ich es mit Regex erweitern. Dies sollte kein allzu großes Problem sein, da sowohl git grep als auch sed regex unterstützen. Wenn ich versuche, Regex in meinen Eingabevariablen zu verwenden, werden die Schrägstriche entfernt, die das Skript ruinieren.

Wenn ich git grep "\bPoint" im Terminal laufen lasse, werde ich viele Ergebnisse bekommen. Ich kann jedoch nicht herausfinden, wie die gleichen Ergebnisse erzielt werden, wenn ich Benutzereingaben in meinem Skript verwende. Die git grep Datei wird meine Eingabe in bPoint statt \bPoint ändern, und wird keine Ergebnisse finden, um sed zu geben.

#!/bin/bash 

# This script allows you to replace text in the git repository without damaging 
# .git files. 

read -p "Text to replace: " toReplace 
read -p "Replace with: " replaceWith 

git grep -l ${toReplace} 

# The command I want to run 
#git grep -l "${toReplace}" | xargs sed -i "s,${toReplace},${replaceWith},g" 

Ich habe eine Menge von verschiedenen Kombinationen von Zitaten versucht, aber nichts scheint zu funktionieren für mich.

+0

das kein Schrägstrich ist, ist es ein Backslash. –

Antwort

2

Sie müssen read -r verwenden. Wie pro help read:

-r keine Schrägstriche erlauben, alle Zeichen zu entkommen

Beispiele:

# without -r 
read -p "Text to replace: " toReplace && echo "$toReplace" 
Text to replace: \bPoint 
bPoint 

# with -r 
read -rp "Text to replace: " toReplace && echo "$toReplace" 
Text to replace: \bPoint 
\bPoint 
+1

Das hat es getan. Vielen Dank! – user2445507

+1

Verwenden Sie doppelte Anführungszeichen um Variablenverweise (z. B. 'git grep -l" $ {toReplace} "'), um eine unerwartete Worttrennung und/oder Platzhaltererweiterung zu vermeiden. –