从包装shell脚本我调用Java程序。我希望Unix shell脚本将所有参数传递给java程序,除了 EMAIL论点。我如何删除EMAIL参数并将其余参数传递给java程序。 EMAIL论点可以在任何位置出现。
valArgs()
{
until [ $# -eq 0 ]; do
case $1 in
-EMAIL)
MAILFLAG=Y
shift
break
;;
esac
done
}
main()
{
valArgs "$@"
$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "$@"
答案 0 :(得分:1)
只是删除“-EMAIL”选项吧?我认为在“-EMAIL”
之后没有额外的参数main(){
args="$1"
case "$1" in
*-EMAIL*)
args=${args/-EMAIL/}
esac
$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "$args"
}
答案 1 :(得分:1)
如果您使用的是bash,则可以使用以下代码段。如果位置参数中有空格,则使用数组有助于解决可能出现的问题。
请记住,原始示例中传递的位置参数仅在valArgs()调用期间持续存在。
#!/bin/bash
main()
{
# Build up arg[] array with all options to be passed
# to subcommand.
i=0
for opt in "$@"; do
case "$opt" in
-EMAIL)
MAILFLAG=Y
;;
*)
arg[i]="$opt"
i=$((i+1))
;;
esac
done
$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "${arg[@]}"
}
main "$@"