【发布时间】:2019-05-01 18:36:24
【问题描述】:
阅读如何在bash 中获取子字符串,我发现以下命令有效:
var="/aaa/bbb/ccc/ddd"
echo ${var##*/}
产生“ddd”
我的完整问题是从管道中动态读取:
我想实现这样的目标:
echo /aaa/bbb/ccc/ddd | xargs echo ${MyVar##*/}
但它不起作用。
我尝试按照以下方式使用 -I 选项:
echo /aaa/bbb/ccc/ddd | xargs -I MyVar echo ${MyVar##*/}
也没有工作,(我认为它没有插值)
有什么办法解决吗?
是否也可以实现读取子字符串的左侧部分而不是右侧部分?
【问题讨论】:
-
保持简单,也许:
FOO=$(echo "/aaa/bbb/ccc/ddd") ; echo ${FOO##*/}?因此,您首先将管道的输出放入 shell 变量,然后应用 shell 解析。它不是单行的,但很简单。 -
我不确定我是否可以那么容易地做到这一点。原始输出来自一个带有多行的 git status 命令,我试图将命令 1 by 1
-
@Mayday:重复问题中的答案应该可以解决您的问题,您根本不需要使用
xargs
标签: bash shell scripting echo xargs