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;
}