停止在bash变量中转义正斜杠

时间:2016-03-24 19:03:34

标签: regex bash grep escaping user-input

我在扩展变量和忽略正斜杠方面遇到了麻烦。

我编写了一个简单的脚本,可以在我的git存储库中找到文本,并将其替换为其他文本。这工作正常,但现在我想使用正则表达式扩展它。这不应该是一个问题,因为git grep和sed都支持正则表达式。但是,当我尝试在输入变量中使用正则表达式时,会删除正斜杠,从而破坏脚本。

如果我在终端中运行git grep "\bPoint",我会得到很多结果。但是,当我在脚本中使用用户输入时,我无法弄清楚如何获得相同的结果。 git grep文件会将我的输入更改为bPoint而不是\bPoint,并且不会找到任何可以提供给sed的结果。

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

我尝试了很多不同的引用组合,但似乎没有什么对我有用。

1 个答案:

答案 0 :(得分:2)

您必须使用read -r。根据{{​​1}}:

  

help read不允许反斜杠转义任何字符

<强>示例:

-r