关于从shell给Java传参数的问题

通过shell教本给java传参数,总是被空格断开(我的目的是接受带空格的参数
)

[code]#!/usr/bin/ksh
#
PARAMS="";
while getopts dek:f:t:vh OPTION
do
    case $OPTION in
        d | e | v | h)
        PARAMS=$PARAMS" -$OPTION"
        ;;
        k)
        PARAMS=$PARAMS" -k$OPTARG";
        ;;
        f | t)
        PARAMS=$PARAMS" "\""-"$OPTION$OPTARG\";
        ;;
        \?)echo "Illegal Paremters"
        exit 1;;
    esac
done
echo $PARAMS
#$JAVA_HOME/bin/java MyTEST $PARAMS
 
MyTEST{
public static void main(String args[])
{
    ...
    for (int i = 0; i < args.length; i++) {
            if (args[i].startsWith("-d"))
                dec = true;
            else if (args[i].startsWith("-e"))
                enc = true;
            else if (args[i].startsWith("-f"))
                file_name = args[i].substring(2, args[i].length());
            else if (args[i].startsWith("-k"))
                key = args[i].substring(2, args[i].length());
            else if (args[i].startsWith("-t"))
                text = args[i].substring(2, args[i].length());
            else if (args[i].startsWith("-a"))
                algorithm = args[i].substring(2, args[i].length());
            else if (args[i].startsWith("-v"))
                verbose = true;
            else if (args[i].startsWith("-h"))
                usage();
            else
                System.out.println("Unknow args:" + args[i]);
        }
      ...
  }
}[/code]

 运行shell脚本 给参数 "abc 00", java接受到两个参数 "abc和00"

怎么回事?

关于从shell给Java传参数的问题

abc 00有空格,参数是以空格间隔的


关于从shell给Java传参数的问题

其实你应该发在shell版,因为不是Java的问题:)
把双引号一起赋值给PARAMS和写成"$PARAMS"是不等价的。
不知道下边的这个是不是符合你的要求。

[code]
#!/usr/bin/ksh

PARAMS="";
while getopts dek:f:t:vh OPTION
do
    case $OPTION in
        d | e | v | h)
        PARAMS=$PARAMS" -$OPTION"
        ;;
        k)
        PARAMS=$PARAMS" -k$OPTARG";
        ;;
        f | t)
        PARAMS=$PARAMS\ -$OPTION$OPTARG;
        ;;
        \?)
        echo "Illegal Paremters"
        exit 1;;
    esac
done
echo $PARAMS
$JAVA_HOME/bin/java MyTEST "$PARAMS"
[/code]

 关于从shell给Java传参数的问题

按照你的做法,所有命令行参数将作为一个参数传递给java啦!

除非我改一改java中的参数处理方式。

还有更好的方式吗?

看来误会你的意思了。
[code]
#!/usr/bin/ksh

PARAMS="";
while getopts dek:f:t:vh OPTION
do
    case $OPTION in
        d | e | v | h)
        PARAMS=$PARAMS" -$OPTION"
        ;;
        k)
        PARAMS=$PARAMS" -k$OPTARG";
        ;;
        f | t)
        PARAMS=$PARAMS\ \"-$OPTION$OPTARG\";
        ;;
        \?)
        echo "Illegal Paremters"
        exit 1;;
    esac
done
echo $PARAMS
eval $JAVA_HOME/bin/java MyTEST $PARAMS
[/code]
这样可以了吧?
 

你可能感兴趣的:(java,F#,脚本)