2016-03-24 15 views
1

Genişleyen değişkenlerle ilgili sorun yaşıyorum ve eğik çizgileri yok sayıyorum.Bash değişkenlerinde ileri eğik çizgiden kaçmayı durdur

Git deposumdaki metni bularak başka bir metinle değiştiren basit bir komut dosyası yazdım. Bu iyi çalışıyor, ancak şimdi regex kullanarak genişletmek istiyorum. Bu, git grep ve sed destek regexinden beri çok fazla sorun olmamalı. Ancak, giriş değişkenlerimde regex kullanmaya çalıştığımda, komut dosyasını bozan eğik çizgi kaldırılır.

Terminalde git grep "\bPoint" çalıştırırsam birçok sonuç alırım. Ancak, komut dosyasımda kullanıcı girdisini kullandığımda aynı sonuçları nasıl alacağımı anlayamıyorum. git grep dosyası, \bPoint yerine bPoint girişimi değiştirecek ve herhangi bir sonuç bulamamayacaktır.

#!/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" 

Çok sayıda farklı teklif kombinasyonu denedim, ancak hiçbir şey benim için çalışmıyor gibi görünüyor.

+0

, bir ters eğik çizgi bu. –

cevap

2

read -r kullanmanız gerekir.

-r ters eğik çizgi karakteri

Örnekler kaçmasına izin vermez: help read uyarınca bir eğik çizgi değil

# 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

Bunu yaptı. Teşekkürler! – user2445507

+1

Ayrıca, beklenmedik sözcük ayırma ve/veya joker karakter genişlemesini önlemek için değişken referanslar etrafında çift tırnak kullanın (ör. 'Git grep -l" $ {toReplace} "'). –