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

如何将类路径通配符作为参数包含到JavaBash调用中?

  •  2
  • lucasvw  · 技术社区  · 6 年前

    #!/bin/bash
    PROP_FILES=./props/default.properties
    #EXTRA_PROP_FILES_HERE
    
    ARGS="-cp \"lib/*\""
    ARGS="$ARGS -Xmx10G"
    ARGS="$ARGS -Duser.timezone=GMT"
    ARGS="$ARGS -Danl.property.files=$PROP_FILES"
    
    java $ARGS main.class.path.Main
    

    问题出在 ARGS="-cp \"lib/*\"" . 我正在用命令调试文件 bash -x runscript.sh .

    如果我转义通配符cp(如上面的脚本中所示),则脚本输出失败(请注意额外的单引号):

    java -cp '"lib/*"' ...

    如果我不逃过这一劫 *

    如何修改脚本以使其调用此脚本?

    java -cp "lib/*" ...
    

    当前位置我知道我能做到 java -cp "lib/*" $ARGS .., ,但我真的很想让它工作。

    1 回复  |  直到 6 年前
        1
  •  4
  •   John Kugelman Michael Hodel    6 年前

    您应该使用带有正确引号的数组:

    propfiles='./props/default.properties'
    
    args=(-cp 'lib/*')
    args+=(-Xmx10G -Duser.timezone=GMT)
    args+=("-Danl.property.files=$propfiles")
    
    java "${args[@]}" main.class.path.Main
    

    此外,使用大写变量名更容易与环境变量冲突,因此最好避免使用大写变量。