【问题标题】:bash: xargs passing variablebash:xargs 传递变量
【发布时间】:2013-03-04 01:51:21
【问题描述】:

如何将全局脚本变量传递给 xargs 的命令?我是这样尝试的:

TEST=hallo2
echo "hallo" | xargs sh -c 'echo passed=$1 test=$TEST' sh

输出:

passed=hallo test=

我知道我可以使用{} 令牌,但我需要这样做!

我正在使用bash

【问题讨论】:

  • 尝试使用export TEST=hallo2
  • @CarlosCampderrós:将其添加为答案。这是最安全、最正确的方法。

标签: linux bash variables xargs


【解决方案1】:

从引号中取出变量$TEST

 TEST=hallo2
 echo "hallo" | xargs sh -c 'echo passed=$1 test='$TEST sh

【讨论】:

  • 如果你采用这种方法,你应该双引号 $TEST 以防止它包含空格。
【解决方案2】:

作为@chepner 建议的答案添加。

export变量TEST

export TEST=hallo2
echo "hallo" | xargs sh -c 'echo passed=$1 test="$TEST"' sh

【讨论】:

  • 这应该被认为是正确的答案,因为变量实际上是在 sh -c '.....' 中传递的。谢谢解决了我的问题。
  • 可以修改TEST里面的变量xargs吗?
【解决方案3】:

使用 GNU Parallel,您可以避免一些引用:

TEST=hallo2
echo "hallo" | parallel echo passed={} test=$TEST

GNU Parallel 以包形式存在于大多数发行版中,建议使用普通包管理器进行安装。但是,如果您的系统没有软件包,安装 GNU Parallel 仍然需要 10 秒。

观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

【讨论】:

  • 我强烈建议不要将一些脚本从堆栈溢出答案中的随机站点传送到您的 shell。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2012-07-02
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多