bash_profile函数以git grep替换

问题描述 投票:0回答:1

我想在我的〜/ .bash_profile中创建一个函数,它将git grep并列出包含字符串的文件,然后用另一个字符串替换所有出现的字符串

function git-replace() { eval git grep -l ${1} | xargs sed -i '' -e 's/${1}/${2}/g' ; }

但是,如果我运行函数git-replace "Type1" "Type2",则什么也不会发生。我在这里做错了什么?

bash git xargs
1个回答
1
投票

有2个问题:

  • 不要使用evil eval
  • 如果要扩展变量,请不要使用单引号而是双引号,所以:
git-replace() {
    git grep -l "$1" | xargs sed -i '' -e "s/$1/$2/g"
}

并且不需要现代shell中的function语句。

了解如何在shell中正确报价,这很重要:

“双引号”包含空格/元字符和every扩展名的每个文字:"$var""$(command "$var")""${array[@]}""a & b"。将'single quotes'用于代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。看到http://mywiki.wooledge.org/Quoteshttp://mywiki.wooledge.org/Arguments http://wiki.bash-hackers.org/syntax/words

© www.soinside.com 2019 - 2024. All rights reserved.