diff --git a/command_parse.go b/command_parse.go index aa95ae1677..0d22dae452 100644 --- a/command_parse.go +++ b/command_parse.go @@ -207,6 +207,7 @@ func (cmd *Command) parseFlags(args Args) (Args, error) { return &stringSliceArgs{posArgs}, fmt.Errorf("%s%s", argumentNotProvidedErrMsg, string(c)) } flagVal = rargs[1] + rargs = rargs[1:] } tracef("parseFlags (flagName %[1]q) (flagVal %[2]q)", flagName, flagVal) if err := cmd.set(flagName, sf, flagVal); err != nil { diff --git a/command_test.go b/command_test.go index efc64e9b56..d9b70f52dd 100644 --- a/command_test.go +++ b/command_test.go @@ -1413,6 +1413,33 @@ func TestCommand_UseShortOptionAfterSliceFlag(t *testing.T) { assert.Equal(t, expected, name) } +func TestCommand_UseShortOptionWithArg(t *testing.T) { + var rootPath string + cmd := &Command{ + UseShortOptionHandling: true, + Commands: []*Command{ + { + Name: "short", + Usage: "complete a task on the list", + Arguments: []Argument{ + &StringArg{Name: "root", UsageText: "Root path", Destination: &rootPath}, + }, + Flags: []Flag{ + &BoolFlag{Name: "serve", Aliases: []string{"s"}}, + &BoolFlag{Name: "option", Aliases: []string{"o"}}, + &StringFlag{Name: "message", Aliases: []string{"m"}}, + }, + Action: func(ctx context.Context, cmd *Command) error { + return nil + }, + }, + }, + } + err := cmd.Run(buildTestContext(t), []string{"app", "short", "-som", "hello", "/path/to/root"}) + require.NoError(t, err) + require.Equal(t, "/path/to/root", rootPath) +} + func TestCommand_Float64Flag(t *testing.T) { var meters float64