java 启动参数空格_Java命令行参数中的空格

参数由shell处理(我假设你在linux下使用bash),所以任何终端设置不应该影响这个。因为你已经引用了这个论点,它应该工作。我可以想到的唯一可能的解释是,如果你的java命令是一个包装脚本,并混乱了参数的转义,当传递到真正的程序。这很容易做,或者可能有点难以正确做。

正确的包装器脚本应该将所有的参数传递为$ {1“$ @”},任何其他版本很可能是一个关于能够正确处理嵌入空间的错误。这是不常见的做正确的,但是任何出现的$ 2或类似的是麻烦的,必须写为“$ 2”(或可能$ {2“$ 2”}),以便正确处理嵌入的空间,这是罪很多。

之所以没有这么直观的语法$ {1“$ @”}是原始的$ *加入所有参数为“$ 1 $ 2 $ 3 …”,这不适用于嵌入式空间。然后,“$ @”被引入(正确)扩展为“$ 1”“$ 2”“$ 3”…所有参数,如果没有给出参数,它应该扩展为无。不幸的是一些unix供应商搞砸了,使“$ @”扩展到“”,即使没有参数,为了解决这个巧妙(但不是那么可读)的写作$ {1“$ @”}的发明,如果设置了参数$ 1(即,在没有参数的情况下避免扩展),则“$ @”仅扩展。

如果我的包装器假设是错误的,你可以尝试用strace调试

strace -o outfile -f -ff -F java test.AskGetCampaignByName "Dummy books"

并找出传递给execve的参数。示例从运行“strace / bin / echo’1 2’3”

execve("/bin/echo", ["/bin/echo", "1 2", "3"], [/* 93 vars */]) = 0

brk(0) = 0x2400000

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f420075b000

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f420075a000

access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)

open("/usr/lib64/alliance/lib/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)

stat("/usr/lib64/alliance/lib/tls/x86_64", 0x7fff08757cd0) = -1 ENOENT (No such file or directory)

open("/usr/lib64/alliance/lib/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值