当使用变量指定其shell命令时,xargs调用失败

时间:2016-02-26 06:42:40

标签: shell variables xargs

我需要在xargs调用中使用变量shell命令。

... xargs -I {} sh -c 命令 ...

我发现xargs在命令为'literal'时有效但在我通过shell变量指定时失败。

有任何疑问可以解决这个问题吗?

以下是示例代码。

## xargs call with literal shell command 

# works; creates file abcd1234.txt containing string 'abcd1234'
echo 'abcd1234' | xargs -I {} -n 1 sh -c 'echo {} | grep "\d" > {}.txt'

## xargs call with variable as shell command

# create shell command to give to xargs
cmd1='echo'
cmd2='grep "\d"'
command=${cmd1}' {} | '${cmd2}' > {}.txt'

# returns the literal command that works: echo {} | grep "\d" > {}.txt
echo $command

# fails
echo 'abcd1234' | xargs -I {} -n 1 sh -c $(echo $command)

1 个答案:

答案 0 :(得分:1)

尝试

echo 'abcd1234' | xargs -I {} sh -c "$command"

注意:我已从命令中删除了-n 1,因为它与-I相矛盾,这意味着逐行处理。

您没有在命令替换$(...)周围使用双引号,这使得shell应用了单词拆分(通过空格拆分为令牌),这意味着多个参数被放置在-c选项而不是命令字符串。

除此之外,不需要涉及命令替换:直接使用 - 双引号 - 变量("$command")就足够了。