我正在尝试将目录更改为我的git存储库的远程位置。我正在使用命令:
cd ${$(git remote get-url origin)%.git}
该命令不起作用:
bash: ${$(git remote get-url origin)%.git}: bad substitution
我不明白为什么这不正确。是因为$()
而不是使用变量名吗?如果是,为什么?我怎么能正确地做到这一点?
答案 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$//')