Command Line Arguments in Squirrel

Command-line arguments are a common way to parameterize execution of programs. For example, java MyProgram arg1 arg2 uses arg1 and arg2 as arguments to the MyProgram class.

public class CommandLineArguments {
    public static void main(String[] args) {
        // args provides access to raw command-line arguments.
        // Note that unlike in some other languages, args does not include the program name.
        String[] argsWithoutProg = args;
        
        // To simulate including the program name, we can create a new array
        String[] argsWithProg = new String[args.length + 1];
        argsWithProg[0] = "CommandLineArguments";
        System.arraycopy(args, 0, argsWithProg, 1, args.length);

        // You can get individual args with normal indexing.
        String arg = args[2];  // Note: This will throw an exception if there are fewer than 3 arguments

        System.out.println(java.util.Arrays.toString(argsWithProg));
        System.out.println(java.util.Arrays.toString(argsWithoutProg));
        System.out.println(arg);
    }
}

To experiment with command-line arguments, it’s best to compile the Java file first.

$ javac CommandLineArguments.java
$ java CommandLineArguments a b c d
[CommandLineArguments, a, b, c, d]
[a, b, c, d]
c

In Java, the main method’s args parameter already excludes the program name, which is different from some other languages. We’ve added extra code to simulate including the program name for demonstration purposes.

Also, be careful when accessing arguments by index. If you try to access an argument that wasn’t provided, you’ll get an ArrayIndexOutOfBoundsException. It’s often a good idea to check the length of the args array before accessing its elements.

Next, we’ll look at more advanced command-line processing with flags, which in Java is typically done using libraries like Apache Commons CLI or JCommander.