protected List parse()

in sshd-scp/src/main/java/org/apache/sshd/scp/server/ScpShell.java [320:363]


    protected List<String[]> parse(String command) {
        List<String[]> cmds = new ArrayList<>();
        List<String> args = new ArrayList<>();
        StringBuilder arg = new StringBuilder();
        char quote = 0;
        boolean escaped = false;
        for (int i = 0; i < command.length(); i++) {
            char ch = command.charAt(i);
            if (escaped) {
                arg.append(ch);
                escaped = false;
            } else if (ch == quote) {
                quote = 0;
            } else if (ch == '"' || ch == '\'') {
                quote = ch;
            } else if (ch == '\\') {
                escaped = true;
            } else if (quote == 0 && Character.isWhitespace(ch)) {
                if (arg.length() > 0) {
                    args.add(arg.toString());
                    arg.setLength(0);
                }
            } else if (quote == 0 && ch == ';') {
                if (arg.length() > 0) {
                    args.add(arg.toString());
                    arg.setLength(0);
                }
                if (!args.isEmpty()) {
                    cmds.add(args.toArray(new String[0]));
                }
                args.clear();
            } else {
                arg.append(ch);
            }
        }
        if (arg.length() > 0) {
            args.add(arg.toString());
            arg.setLength(0);
        }
        if (!args.isEmpty()) {
            cmds.add(args.toArray(new String[0]));
        }
        return cmds;
    }