diff --git a/src/main/java/picocli/AutoComplete.java b/src/main/java/picocli/AutoComplete.java index 6c183c235..a2d22703c 100644 --- a/src/main/java/picocli/AutoComplete.java +++ b/src/main/java/picocli/AutoComplete.java @@ -560,7 +560,8 @@ private static void generateFunctionCallsToArrContains(StringBuilder buff, int count = functionCalls.size(); CommandSpec spec = descriptor.commandLine.getCommandSpec(); String full = spec.qualifiedName(" "); - String withoutTopLevelCommand = full.substring(spec.root().name().length() + 1).replace(spec.name(), descriptor.commandName); + String withoutTopLevelCommand = full.substring(spec.root().name().length() + 1, + full.length() - spec.name().length()) + descriptor.commandName; functionCalls.add(format(" if CompWordsContainsArray \"${cmds%2$d[@]}\"; then %1$s; return $?; fi\n", descriptor.functionName, count)); buff.append( format(" local cmds%2$d=(%1$s)\n", withoutTopLevelCommand, count)); diff --git a/src/main/java/picocli/CommandLine.java b/src/main/java/picocli/CommandLine.java index fa50525d8..0f22b6499 100644 --- a/src/main/java/picocli/CommandLine.java +++ b/src/main/java/picocli/CommandLine.java @@ -6412,7 +6412,7 @@ public CommandSpec addSubcommand(String name, CommandSpec subcommand) { */ public CommandSpec addSubcommand(String name, CommandLine subCommandLine) { CommandSpec subSpec = subCommandLine.getCommandSpec(); - String actualName = interpolator.interpolateCommandName(validateSubcommandName(name, subSpec)); + String actualName = validateSubcommandName(interpolator.interpolateCommandName(name), subSpec); Tracer t = new Tracer(); if (t.isDebug()) {t.debug("Adding subcommand '%s' to '%s'%n", actualName, this.qualifiedName());} String previousName = commands.getCaseSensitiveKey(actualName);