diff --git a/commands/cli/parse.go b/commands/cli/parse.go
index a5a0e07159cb7d62fe672d79285bd314186945f4..9858a997e46f7d313c7800a6a9894b1b81d439aa 100644
--- a/commands/cli/parse.go
+++ b/commands/cli/parse.go
@@ -182,9 +182,11 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi
 		argDef := getArgDef(argDefIndex, argDefs)
 
 		// skip optional argument definitions if there aren't sufficient remaining inputs
-		if numInputs-i <= numRequired && !argDef.Required {
-			continue
-		} else if argDef.Required {
+		for numInputs-i <= numRequired && !argDef.Required {
+			argDefIndex++
+			argDef = getArgDef(argDefIndex, argDefs)
+		}
+		if argDef.Required {
 			numRequired--
 		}