在 cygwin 中使用带 xargs 的子字符串

Using substring with xargs in cygwin

我正在尝试在 cygwin 中的 xargs 管道语句的 {} 部分使用子字符串功能。这是我没有子字符串的命令:

git branch -r --merged master | grep "feature/" | xargs -I {} git push origin :{}

这几乎就是我需要它做的,但是前两部分生成的命令字符串前面有一个"origin/"。所以我只需要切断它。我阅读了有关使用 ${str:n} 作为子字符串的信息。这就是我尝试使用它的方式:

git branch -r --merged master | grep "feature/" | xargs -I {} git push origin :${{}:7}

但我收到了 "bad substitution" 错误消息,因为看起来该命令需要一个变量并且不喜欢 {}。我知道我可能可以通过编写一个简单的 bash 脚本来遍历 git branch -r --merged master | grep "feature/" 生成的列表来解决这个问题,但我猜我可以更改一些小的语法来让它工作。

{} 不是 shell 变量。您可以将其传递给 bash -c 命令行:

git branch -r --merged master | grep "feature/" | 
xargs -I {} bash -c 'git push origin ":${1#origin/}"' - {}

${1#origin/}" 将删除 </code> 开头的 <code>origin/