从文本文件生成多个Bash选项?

我有一个命令,把域名作为选项。 我有很长的域名列表,所以我想自动parsing这个域列表到命令中。

例如,最简单的用法是command --option=example-one.com --output=file.ext 。 添加域列表后,最终要执行的命令看起来像command --option=example-one.com ... --option=example-99.io --output=file.ext (其中'…'将会有97个更多的选项,在这里缩略显示)

这是可能在Bash做,如果是的话,请问是什么?

以下是我尝试过的方法:

  1. command --option=$(cat domains.txt) --output=file.ext
  2. command "$(while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt)" --output=file.ext
  3. command --option="domains.txt" --output=file.ext

该命令while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt > all-options.txt while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt > all-options.txt while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt > all-options.txt确实输出一个完全格式化的选项列表到一个新的文件all-options.txt,但我不明白如何将选项的输出redirect回到命令,而不是文本文件。

如果有问题,域名列表包括西里尔文字符。

 command $(printf -- "--option=%s " $(<domains.txt)) --output=file.ext 

是我知道的最紧凑的方式。

你应该尝试的是什么

 command $(while read baddomains ; do echo -n "--option=$baddomains " ; done < domains.txt) --output=file.ext 

但它不适用于你,因为你在子shell中使用了错误的引号,并把整个$()放在双引号中,所以command把整个看作一个参数。

如果有问题,域名列表包括西里尔文字符。

这些命令无关紧要,但是,如果这些命令没有被正确编码,他们又怎能成为有效的域名呢? 如果他们是punycoded,shell将不会看到任何西里尔字符。 在这两种情况下,它都会很高兴地处理它的input。

你可以用参数构build一个数组:

 args=() while read -r domain _; do args+=("--option=$domain") done < domains.txt command "${args[@]}" --output=file.ext