linux - 通过 bash 脚本执行编译器标志

标签 linux bash shell arguments

我是 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/

相关文章:

c++ - Linux 上的 x86 C++ 开发存在哪些(有效的)备用工具链?

linux - 如何在没有密码的情况下在 Alpine Linux 中通过 ssh 登录?

linux - 如何将 IP 地址添加到 NAT 表 (Linux Debian) - POSTROUTING 链

linux - 困惑 - 我真的有哪个外壳?

python - 在 linux/Gnome 上获取多个屏幕的屏幕布局

linux - 查找其他人没有读取权限的文件

linux - Shell - 在 IF else 中运行一堆命令

linux - 无法删除 Linux 上名称/编码奇怪的文件

regex - 用 sed (或类似的)替换前导空格

shell - UNIX : Creating a table formatted ouput from a delimited text file