You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git submodule foreach判断子模块路径前缀时遇语法错误求解

解决git submodule foreach语法错误且保留$sm_path的方法

问题原因

git submodule foreach 默认使用系统的 /bin/sh 执行命令,而你用的 [[ ]] 是 Bash 独有的语法,sh 不支持,所以触发语法错误。直接加 bash -c 时,子 Bash 进程无法继承外层的 $sm_path 变量,导致变量失效。

可行解决方案

方案1:改用sh兼容的case语句

不需要切换shell,用sh支持的case语句实现前缀匹配:

git submodule foreach \
'
   echo $sm_path
   case "$sm_path" in
      my_submodule_name*)
         echo found submodule starting with my_submodule_name
         ;;
   esac
'

方案2:指定git用bash执行命令

通过环境变量让git submodule foreach使用bash,这样就能保留[[ ]]语法,同时正常获取$sm_path:

GIT_SHELL=/bin/bash git submodule foreach \
'
   echo $sm_path
   if [[ $sm_path = my_submodule_name* ]] ; then 
      echo found submodule starting with my_submodule_name
   fi
'

方案3:手动传递$sm_path到bash子进程

如果必须用bash -c,需要转义变量让它能传入子进程:

git submodule foreach 'bash -c "echo \$sm_path; if [[ \$sm_path = my_submodule_name* ]]; then echo found submodule starting with my_submodule_name; fi"'

内容的提问来源于stack exchange,提问作者FrankPak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:22:08