【问题标题】:bash substring from xargs piped [duplicate]来自xargs管道的bash子字符串[重复]
【发布时间】: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


【解决方案1】:

你可以这样做:

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

希望对你有帮助!

【讨论】:

    【解决方案2】:

    你可以这样使用它:

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

    ddd
    

    或者直接使用awk:

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

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 2014-02-26
      • 1970-01-01
      • 2016-11-17
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      相关资源
      最近更新 更多