我正在尝试使用 exec 插件创建一个简单的 bash 脚本来运行带有一些特定参数和“子”参数的 mvn 命令。看起来很简单,但我在达到预期效果时遇到了问题:
这是要运行的命令:
mvn exec:java -Dexec.args="-a val1 -b val2 -c val3"
像这样运行时它工作正常,但我想将它包装在一个 bash 脚本中,便于所有人运行:
myapp -a val1 -b val2 -c val3
该脚本将很简单:
mvn exec:java -Dexec.args="$@"
但是 "$@" 并没有使它成为一个单引号值,所以我尝试引用它:
mvn exec:java -Dexec.args=\""$@"\"
我还尝试了第二个脚本,我称为quoter:
./myapp \""$@"\"
这也不起作用,经过很好的组合播放时间,感觉就像我引用它多少次,它仍然将它视为参数列表,第一个元素“-a,然后是第二个元素val1 ,然后是第三个 -b,以此类推。
奇怪的是,如果我不引用引用脚本中的参数,并像这样运行它:
./quoter "-a val1 -b val2 -c val3"
它工作正常,它作为单个参数传递给第二个脚本,然后传递给执行 maven 命令的第一个脚本。
看起来,“$@”并不是一个由所有参数的字符串化连接组成的字符串(如果你考虑一下,这很酷),也不是回显它似乎将它转换为一个(不酷)。有没有办法让这成为可能?
PS:是的,我正在尝试将选项传递给主程序,这是一个严重依赖 Spring 独立应用程序。