【问题标题】:Passing exclamation point to java program on command line在命令行上将感叹号传递给java程序
【发布时间】:2009-02-22 12:24:25
【问题描述】:

我想传递字符串“!changeme!”到命令行上的java程序,如:

java -cp "!AXIS2_CLASS_PATH!" ClientJava --userid admin --passwd "!changeme!"

使用 Windows XP、Java jdk 1.6.0_07。

AXIS2_CLASS_PATH 被正常替换,我假设由 java 运行时替换。但是 !changeme! 的密码!似乎也被替换为空字符串。我假设这个替换是某种 JVM 特性。

使用以下程序:

static int Run(String[] aArgs) {
    for (String s: aArgs) {
        System.out.println("arg: " + s);
    }
    return 0;
}

我得到以下结果:

"C:\Program Files\Java\jdk1.6.0_07\bin\java" -cp "!AXIS2_CLASS_PATH!"
    ClientJava --userid admin --passwd "!changeme!"
arg: --userid
arg: admin
arg: --passwd
arg:

我需要按原样传递密码。我尝试了各种转义,但我没有找到我需要使用的东西。

任何人都可以提供有关如何执行此操作的提示吗?

Zach Scrivena 提供的解决方案是:

使用插入符号来转义感叹号。

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"

arg: --userid
arg: admin
arg: --passwd
arg: !changeme!

【问题讨论】:

  • 你在什么环境下替换 !foo! ?我强烈怀疑这个问题与 Java 无关,与您所处的任何 shell 环境有关。
  • 使用 Windows XP。 Windows 中没有任何东西可以进行这种替换。我相信它是 JVM,但如果有解决方案,我很高兴被证明是错误的。

标签: java command-line


【解决方案1】:

问题是由命令行解释器引起的 --- 它用相应的环境变量替换了用感叹号 ! 括起来的术语。

只需在每个转义字符前加上插入符号 ^。这适用于命令行和批处理文件:

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx "^!changeme^!"

在命令行中,您还可以将每个转义字符括在双引号中"

java -cp "!AXIS2_CLASS_PATH!" ClientJava --xxx ""!"changeme"!""

【讨论】:

  • --passwd ""!"changeme"!"" 不起作用(= " 单双引号),但 --passwd "^!changeme^!" 确实会产生所需的字符串. 谢谢。
  • %FOO% 和 !FOO! 的区别是什么? ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多