Linux中大括号的评估

时间:2018-06-12 15:34:55

标签: linux bash xargs

我注意到我们可以使用花括号使一些命令更短,因为它被计算到参数列表中。

输入:

echo a{,b,c}

输出:

a ab ac

从文件传递参数时,如何强制执行相同的行为?

输入:

cat file.txt | xargs echo

输出:

a{,b,c}

预期输出 - 与上一个示例相同。

3 个答案:

答案 0 :(得分:1)

{}扩展是bash / zsh功能,因此您需要通过任何这些shell显式运行它,在您的情况下(使用{{1}让xargs在运行之前将其替换为字符串):

-I<STRING>

答案 1 :(得分:-1)

  1. xargs调用$ PATH中的echo,而不是shell的内置回声。
  2. 检查list of bash expansions:大括号扩展首先发生,因此它不会有机会在该管道中扩展。
  3. 你必须做类似的事情

    while read -r line; do eval echo "$line"; done < file.txt
    
    如果有人在该文件中放入恶意内容,

    会使您面临各种令人讨厌的攻击。<​​/ p>

答案 2 :(得分:-1)

除了问你为什么要这样做...我提供以下内容:

将字符串添加到文件中:

input_fn

将字符串放在变量中:

echo 'a{,b,c}' > /tmp/foo

export thing=`cat /tmp/foo` 字符串:

eval

如果你在文件中有一堆这样的文件,那么通过循环运行文件并评估循环值:

eval $thing