代码之家  ›  专栏  ›  技术社区  ›  LoneWolfPR

Bash脚本:指定给变量的xargs的结果将丢失除一项之外的所有项

  •  1
  • LoneWolfPR  · 技术社区  · 2 年前

    我正在运行一个bash脚本,该脚本通过greps文件来识别测试,然后它应该将结果输出到字符串并存储在变量中。当命令单独运行时,它会在一行中正确地回显所有文件,但当我尝试将结果分配给变量时,只显示一个。

    这将按预期工作,并显示预期文件的完整列表。

    grep -Erli ' @IsTest| testmethod' './build/source/classes' | sed 's#.*/## ; s#.cls##' | xargs echo
    

    但是,当我这样做时,回显的结果是只有一个文件列在 TESTS 变量

    TESTS=($(grep -Erli ' @IsTest| testmethod' './build/source/classes' | sed 's#.*/## ; s#.cls##' | xargs echo))
    echo $TESTS
    

    把它放在变量赋值表达式中有什么问题吗?这似乎是每个项目之间的空白问题。如果我加上 | tr ' ' ',' 到最后,它用逗号替换了空白,列出了所有内容,但这不是我可以使用的解决方案。我需要一个以空格分隔的文件列表。

    1 回复  |  直到 2 年前
        1
  •  1
  •   markp-fuso    2 年前

    TESTS=( ... ) 正在创建 大堆 个条目。

    echo $TESTS echo ${TESTS[0]} ,即显示数组中的第一个条目。

    要显示数组的全部内容,请尝试 echo "${TESTS[@]}" typeset -p TESTS

    考虑:

    $ TESTS=( a b c )
    
    $ echo "$TESTS"
    a
    
    $ echo "${TESTS[0]}"
    a
    
    $ echo "${TESTS[@]}"
    a b c
    
    $ typeset -p TESTS
    declare -a TESTS=([0]="a" [1]="b" [2]="c")
    
    推荐文章