Bash:$ {$(mycommand)%suffix}无法修剪mycommand输出的后缀

时间:2017-10-15 10:04:26

标签: bash shell git-bash

我正在尝试将目录更改为我的git存储库的远程位置。我正在使用命令:

cd ${$(git remote get-url origin)%.git}

该命令不起作用:

bash: ${$(git remote get-url origin)%.git}: bad substitution

我不明白为什么这不正确。是因为$()而不是使用变量名吗?如果是,为什么?我怎么能正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

您不能在参数扩展中使用命令替换并删除子字符串。你需要两个步骤:

tmp=$(git remote get-url origin)
cd "${tmp%.git}"

这将消除不良替代。

Parameter expansion本身在shell parameter上运行(包括由名称,位置参数等引用的shell变量)。因此,如果您使用%.git从右侧移除.git,则必须将其包含在某个变量中,例如上面tmp,然后参数扩展按预期工作。

答案 1 :(得分:0)

您不能在bash中使用嵌套字符串替换。

相反,你可以使用这个单行:

cd $(git remote get-url origin | sed 's/\.git$//')