如何让echo -e或printf在git submodule foreach中正常输出颜色转义字符
问题根因
git submodule foreach 默认调用POSIX标准的sh执行传入的命令,而非用户日常使用的bash/zsh等扩展shell:
- POSIX规范的
echo默认不支持-e参数,会直接把-e作为普通文本输出 - POSIX规范的
printf不支持\u开头的Unicode转义写法,仅支持\0开头的八进制转义序列
解决方案
方案1:使用兼容POSIX的八进制转义(推荐,无额外依赖)
将ANSI转义序列的起始符\u001b替换为POSIX printf原生支持的八进制写法\033,直接执行即可生效:
git submodule foreach -q 'printf "\033[37;1mtest\n"'
方案2:显式指定用bash执行命令
如果你需要使用\u转义、echo -e等bash专属特性,可以把命令嵌套到bash -c中执行:
git submodule foreach -q 'bash -c "echo -e \"\u001b[37;1mtest\""'
如果不想处理多层引号转义,也可以用bash的$'...'字符串语法简化写法:
git submodule foreach -q 'bash -c "echo $'\''\e[37;1mtest'\''"'
内容的提问来源于stack exchange,提问作者Guillaume D
相关产品推荐
相关产品推荐

