Windows下Eclipse中C项目预处理器定义的双引号转义问题
解决Windows Eclipse中C项目预处理器获取Git状态时的引号转义问题
直接用以下单行预处理器定义即可解决:
GIT_STATUS="$(shell git status -s | sed 's/"/\\\\"/g')"
为什么之前的命令会出错?
在Eclipse的预处理器定义里,反斜杠和双引号会经过多层解析:
- Eclipse本身会先解析一次转义字符,吃掉一个反斜杠
- 后续调用的shell(比如Git Bash)会再解析一次,又吃掉一个反斜杠
之前你写的sed 's/"/\\"/g',经过两层解析后,sed实际收到的替换表达式是s/"/"/g,这显然会导致语法错误,要么报bad option要么输出空值。
另一种备选方案(用awk避免sed的转义麻烦)
如果sed的转义还是搞不定,用awk的写法可能更直观:
GIT_STATUS="$(shell git status -s | awk '{gsub(/"/,"\\\\\""); print}')"
验证步骤
先在Git Bash里单独测试管道命令,确认输出符合预期:
git status -s | sed 's/"/\\\\"/g'
看到输出里的路径引号变成\"xxx\"格式后,再把整个命令放到Eclipse的预处理器定义中即可。
内容的提问来源于stack exchange,提问作者elechris
相关产品推荐
相关产品推荐

