Bash:for循环中错误的子替换错误-git标记

Bash:for循环中错误的子替换错误-git标记,bash,git,Bash,Git,我正在尝试使用gitsvnclone..执行从SVN到GIT的迁移,一切都很顺利 现在我需要使用以下命令将SVN中的标记转换为git中的真实标记 for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin/tags) do git tag ${t/origin\/tags\//} $t - #BAD substitution error - need to fix git branch

我正在尝试使用
gitsvnclone..
执行从SVN到GIT的迁移,一切都很顺利

现在我需要使用以下命令将SVN中的标记转换为git中的真实标记

for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin/tags) 
do 
    git tag ${t/origin\/tags\//} $t - #BAD substitution error - need to fix
    git branch -D -r $t
done
如果我在命令行中运行这个脚本,它可以工作,但是如果我在shell脚本中运行这个脚本,它将失败,并出现“错误替换错误”。有什么建议吗

全文如下:

#/bin/bash
##修改后的脚本-来自https://github.com/MPDFT/svn-to-git
#######项目名称
项目名称=”#示例-Digisharp
SVN_USERNAME=”“#示例-adys
GIT_USERNAME=”“#示例-adys
GIT_CREDENTIAL=“”#示例-pz2fekhjcsq5io5xbslcuss5lspo4lcgh4cwjswge265uzxrnzxv
#######SVN
#要迁移的SVN存储库
SVN_URL=”“#示例-
#######吉特
#要迁移的Git存储库-重要!您必须包含用户名和密码(AZURE的PAT令牌)
#我们需要它来自动化git推送,而不需要它询问您密码
GIT_URL=”“#示例-
###########################
####不需要从这里改变
###########################
#风格与色彩
红色='\033[0;31m'
浅绿色='\e[1;32m'
NC='\033[0m'#无颜色
echo-e“${LIGHT_GREEN}[LOG]开始迁移${NC}”$SVN_TRUNK
echo-e“${LIGHT_GREEN}[LOG]使用:${NC}”$(git--version)
echo-e“${LIGHT_GREEN}[LOG]使用:${NC}”$(svn--version | grep svn,)
echo-e“${LIGHT_GREEN}[LOG]步骤01/05创建目录${NC}”
echo-e“${LIGHT_GREEN}[RUN]步骤02/05${NC}.$git svn clone--stdlayout--no最小化url$BASE\u svn$PROJECT\u NAME--user=$svn\u USERNAME”
git svn clone--stdlayout--no最小化url$svn\u url$PROJECT\u NAME--user=$svn\u USERNAME--authors file=authors.txt
cd$项目名称
echo-e“${LIGHT_GREEN}[RUN]步骤03/05${NC}$git remote add origin”
git远程添加源代码$git\u URL
echo-e“${LIGHT_GREEN}[RUN]步骤04/05${NC}-准备git分支和标记”
对于t,单位为$(每个ref的git——格式='%(refname:short)'refs/remotes/origin/tags)
做
#git标记${t/origin\/tags\/}$t-错误的替换错误-需要修复
吉特分行-D-r$t
完成
对于美元中的b(每个引用的git——格式='%(引用名称:short)'refs/remotes)
做
git分支机构$b参考/remotes/$b
吉特分行-D-r$b
完成
echo-e“${LIGHT_GREEN}[RUN]步骤05/05[RUN]git push${NC}”
git推送原点——全部
git推送原点--标记
echo“成功-git存储库现在位于“$git\u URL”中

我使用
sh migration运行命令。sh

您是否使用类似
/bin/sh/path/to/script.sh的命令执行脚本

${t/origin\/tags\/}
在bash中可用,但与POSIX shell不兼容,您可能会成功地将其更改为以下内容:

echo "$t" | sed 's~origin/tags/~~'

我强烈建议您在脚本中使用lint,因为您可能会遇到一些错误。

您是否使用类似于
/bin/sh/path/to/script.sh的内容执行脚本

${t/origin\/tags\/}
在bash中可用,但与POSIX shell不兼容,您可能会成功地将其更改为以下内容:

echo "$t" | sed 's~origin/tags/~~'
我强烈建议您在脚本中使用lint,因为您可能会遇到一些错误

我使用
sh migration.sh
运行该命令

${var/search/replacement}
是一种bash功能。运行
sh
明确表示忽略
#!/bin/bash
shebang行。切勿以这种方式运行脚本

不需要编辑脚本来删除bashism。只需使用
/migration.sh
运行它,就可以遵守shebang

$ ./migration.sh
我使用
sh migration.sh
运行该命令

${var/search/replacement}
是一种bash功能。运行
sh
明确表示忽略
#!/bin/bash
shebang行。切勿以这种方式运行脚本

不需要编辑脚本来删除bashism。只需使用
/migration.sh
运行它,就可以遵守shebang

$ ./migration.sh

不同的shell?检查我的编辑。我在bash shell中运行命令不同的shell我指的是用于运行脚本的shell(
!/bin/bash
)可能与用于测试命令的交互式shell不同。甚至不同版本的Bash都很重要。不同的shell?请检查我的编辑。我在Bash shell中运行命令的shell不同的shell我是指用于运行脚本的shell(
#!/bin/Bash
)可能与您用来测试命令的交互式shell不同,甚至不同版本的Bash都很重要。