如何在Shell脚本中可靠检测Git literal pathspecs是否启用?
检测Git literal pathspecs是否启用的可靠方法
用Git内置工具解析(推荐)
Git自带的git config命令可以按照自身规则解析布尔值,完全不用自己实现解析逻辑,这是最可靠的方案——因为它和Git处理该变量的逻辑完全一致,不用担心文档过时或遗漏情况。
你可以在Shell脚本里这样写:
if git config --bool --get "literal-pathspecs" >/dev/null 2>&1; then echo 'literal pathspecs are ON' else echo 'literal pathspecs are OFF' fi
原理:Git会优先读取GIT_LITERAL_PATHSPECS环境变量(它会覆盖同名的配置项),--bool参数让Git按照布尔规则判断值的真假,返回对应退出码:值为真时退出码是0,假时是非0,直接用if判断即可。
关于你自己写的脚本
你的脚本覆盖了大部分文档提到的情况,但有两个小问题:
- 遇到带前导零的正数(比如
01)时,[ "$GIT_LITERAL_PATHSPECS" -ge 1 ]会因为bash将其视为八进制数而报错(比如08会被判定为无效数字) - 没有处理变量为空的场景(此时应该视为关闭状态)
如果一定要自己实现解析,修正后的版本可以是:
case "${GIT_LITERAL_PATHSPECS:-}" in [tT][rR][uU][eE]|[yY][eE][sS]|[oO][nN]|[1-9]*) echo 'literal pathspecs are ON' ;; *) echo 'literal pathspecs are OFF' ;; esac
这个版本用模式匹配处理字符串值,[1-9]*)能匹配所有非零开头的正数(包括带小数的正数,比如1.5,Git也会判定为真),同时默认空值为关闭。
补充说明
--literal-pathspecs命令行标志确实会自动设置GIT_LITERAL_PATHSPECS=1环境变量,所以上述两种方法都能检测到通过命令行开启的情况。
内容的提问来源于stack exchange,提问作者Piotr Siupa
相关产品推荐
相关产品推荐

