我想在我的〜/ .bash_profile中创建一个函数,它将git grep并列出包含字符串的文件,然后用另一个字符串替换所有出现的字符串
function git-replace() { eval git grep -l ${1} | xargs sed -i '' -e 's/${1}/${2}/g' ; }
但是,如果我运行函数git-replace "Type1" "Type2"
,则什么也不会发生。我在这里做错了什么?
有2个问题:
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