首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash:${$( mycommand )%后缀}无法从mycommand输出中修剪后缀

Bash:${$( mycommand )%后缀}无法从mycommand输出中修剪后缀
EN

Stack Overflow用户
提问于 2017-10-15 10:04:25
回答 2查看 96关注 0票数 3

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

代码语言:javascript
复制
cd ${$(git remote get-url origin)%.git}

该命令不起作用:

代码语言:javascript
复制
bash: ${$(git remote get-url origin)%.git}: bad substitution

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-15 10:09:30

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

相反,您可以使用以下一行:

代码语言:javascript
复制
cd $(git remote get-url origin | sed 's/\.git$//')
票数 1
EN

Stack Overflow用户

发布于 2017-10-15 10:10:29

不能在参数展开中使用带有子字符串删除的命令替换。你需要两步:

代码语言:javascript
复制
tmp=$(git remote get-url origin)
cd "${tmp%.git}"

这将消除坏的替代。

参数展开本身对壳参数进行操作(包括由名称、位置参数等引用的shell变量)。因此,如果您使用%.git.git从右侧移除,则必须将其包含在某个变量中,例如上面的tmp,那么参数展开将按预期工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46753831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档