我是 bash 脚本的新手。我需要执行 dx
命令获取 java 类文件并将其转换为 dex 文件。这里我的java类文件是apple.class
,想要输出classes.dex
文件转换的命令是:
dx -JXmx256m --debug --dex --dump-to=apple.lst --output=classes.dex --dump-width=1000 apple.class
我想通过 bash 脚本执行这个命令。这是我的方法:
脚本.sh
filelst="apple.lst"
filedex="classes.dex"
filecl="apple.class"
flag1="--dump-to=$file1st"
flag2="--output=$filedex"
flag3="--dump-width=1000 $filecl"
dx "--debug --dex $flag1 $flag2 $flag3"
当我运行 bash script.sh
时,它向我发送错误,显示运行 dx 命令的步骤。但是当我在没有 bash 脚本的情况下运行时,它成功执行了。请帮助我在 bash 脚本中为这个命令编写正确的方法。
error: no command specified
usage:
dx --dex [--debug] [--verbose] ...
最佳答案
dx
看到的是 一个 参数,而不是 --debug
、--dex
等的单独参数. 通常的做法是让 $flag1
等不加引号:
dx --debug --dex $flag1 $flag2 $flag3
但是如果任何嵌入的选项包含空格,它自己就会有问题..
正确的解决方案是使用数组来存储多个参数。
filelst="apple.lst"
filedex="classes.dex"
filecl="apple.class"
flag1="--dump-to=$filelst"
flag2="--output=$filedex"
flag3=( --dump-width=1000 "$filecl")
dx --debug --dex "$flag1" "$flag2" "${flag[@]}"
或者更简单的说
flags=(--dump-to="$filelst" --output="$filedex" --dump-width=1000 "$filecl")
dx --debug --dex "{$flags[@]}"
关于linux - 通过 bash 脚本执行编译器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785430/