Issue with Command Line arguments which got spaces in it

前端 未结 5 1912
心在旅途
心在旅途 2020-11-29 09:41

I have a Java program which I\'m executing in a Linux environment through a bash script.

This is my simple bash script, which accepts a String.

#!/bi         


        
相关标签:
5条回答
  • 2020-11-29 10:11

    When you pass command line arguments with spaces, they are taken as space separated arguments, and are splitted on space. So, you don't actually have a single argument, but multiple arguments.

    If you want to pass arguments with spaces, use quotes:

    java classname "Apple Inc. 2013 Jul 05 395.00 Call"
    
    0 讨论(0)
  • Single quotes are the best option

    Spaces and double quotes can be resolved this way.

    java QuerySystem '((group = "infra") & (last-modified > "2 years ago"))' 
    
    0 讨论(0)
  • 2020-11-29 10:17

    In the original question the OP is using a shell script to call a java command line and would like the shell script to pass the arguments without performing the Blank interpretation (Word Splitting) option of input interpretation https://rg1-teaching.mpi-inf.mpg.de/unixffb-ss98/quoting-guide.html#para:sh-ifs

    If you know how many arguments there are then you can double quote the arguments

    #!/bin/bash
    java -cp  com.QuoteTester "$1"
    

    So you call this script, save as quotetester.sh.

    ./quotetester.sh "hello world" 
    

    and "hello world" gets passed as a single argument to Java. You could also use

    ./quotetester.sh hello\ world 
    

    with the same effect.

    0 讨论(0)
  • 2020-11-29 10:18

    This is not a Java issue per se. It's a shell issue, and applies to anything you invoke with such arguments. Your shell is splitting up the arguments and feeding them separately to the Java process.

    You have to quote the arguments such that the shell doesn't split them up. e.g.

    $ java  -cp ... "Apple Inc. 2013"
    

    etc. See here for a longer discussion.

    0 讨论(0)
  • 2020-11-29 10:20

    The arguments are handled by the shell , so any terminal settings should not affect this. You just need to have quoted argument and it should work.

    0 讨论(0)
提交回复
热议问题