Combining Short Options
Traditional use of options using their shortnames look like this:
$ cmd -s -o -m "Some message"
Suppose you want users to be able to combine options with their shortnames. This
can be done using the UseShortOptionHandling
bool in your app configuration,
or for individual commands by attaching it to the command configuration. For
example:
package main
import (
"fmt"
"log"
"os"
"context"
"github.com/urfave/cli/v3"
)
func main() {
cmd := &cli.Command{
UseShortOptionHandling: true,
Commands: []*cli.Command{
{
Name: "short",
Usage: "complete a task on the list",
Flags: []cli.Flag{
&cli.BoolFlag{Name: "serve", Aliases: []string{"s"}},
&cli.BoolFlag{Name: "option", Aliases: []string{"o"}},
&cli.StringFlag{Name: "message", Aliases: []string{"m"}},
},
Action: func(ctx context.Context, cmd *cli.Command) error {
fmt.Println("serve:", cmd.Bool("serve"))
fmt.Println("option:", cmd.Bool("option"))
fmt.Println("message:", cmd.String("message"))
return nil
},
},
},
}
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal(err)
}
}
If your program has any number of bool flags such as serve
and option
, and
optionally one non-bool flag message
, with the short options of -s
, -o
,
and -m
respectively, setting UseShortOptionHandling
will also support the
following syntax:
$ cmd -som "Some message"
If you enable UseShortOptionHandling
, then you must not use any flags that
have a single leading -
or this will result in failures. For example,
-option
can no longer be used. Flags with two leading dashes (such as
--options
) are still valid.