【问题标题】:Passing command line parameters through variables通过变量传递命令行参数
【发布时间】:2018-08-20 12:56:43
【问题描述】:

我正在尝试通过添加带有“外部世界”信息(即用户输入)的参数来构建命令行。

假设我想 grep 文件以获取用户给我的一组单词(这只是向您展示用例,我真的在尝试运行生物信息学代码,但每个人都有 grep 用于测试目的)。我的想法是我将在 bash 数组中有一个单词列表:

$ L=("foo" "bar")

我想使用该列表来结束与

$ grep -e foo -e bar input.txt

我使用了一种生成需求参数字符串的方法

$ P=${L[@]/#/-e }

$ echo "$P"
-e foo -e bar

但我不能按原样使用它(假设文件包含 foo 和 bar):

$ grep "$P" input.txt
<No output>

最后一条命令,实际搜索的是字符串“-e foo -e bar”。

如果我在不带引号的情况下运行该命令,它可以工作,但它也会触发 shellcheck.net 中的 SC2086 警告,这是我试图避免的。

我已经尝试了几种数组、括号、引号的组合...但我无法确定满足我需要的确切语法。有人有这种语法吗?

【问题讨论】:

    标签: bash


    【解决方案1】:

    如果您引用参数字符串,它将被解释为 一个 长参数。如果你不引用它,那么你就依赖分词,它有很多警告,不推荐。

    您可以像这样构建参数:

    arg=()
    arr=(foo bar)
    for a in "${arr[@]}"; do arg+=(-e "$a"); done
    
    grep "${arg[@]}" input
    

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2021-11-29
      • 2012-02-29
      相关资源
      最近更新 更多