bash 来自 xargs 的子字符串已通过管道传输

bash substring from xargs piped

阅读如何在 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##*/}

也没有用,(我认为它没有插值)

有什么办法解决这个问题吗?

是否可以同时读取子字符串的左侧部分而不是右侧部分?

你可以这样使用它:

echo '/aaa/bbb/ccc/ddd' | xargs -I {} bash -c 'echo "${1##*/}"' - {}

ddd

或者只使用 awk:

echo '/aaa/bbb/ccc/ddd' | awk -F/ '{print $NF}'

你可以这样做:

echo '/aaa/bbb/ccc/ddd' | sed -E 's/(.*\/)(.*)//g' | xargs -n 1 

希望对您有所帮助!