我在扩展变量和忽略它们的斜杠时遇到了问题。
我已经编写了一个简单的脚本,在git存储库中查找文本并用其他文本替换它。这很好,但现在我想使用regex来扩展它。这应该不是太大的问题,因为git grep和sed都支持regex。但是,当我尝试在输入变量中使用regex时,会删除前斜杠,这会破坏脚本。
如果我在终端中运行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"
我试过很多不同的报价组合,但似乎都不适合我。
您必须使用read -r
。根据help read
:
-r
不允许反斜杠转义任何字符
示例:
# 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