我有一个脚本,可以通过3个主要步骤执行某些任务。每个步骤可能需要一些额外的参数,但根据选择的步骤,这些可能会有所不同。用户可以选择仅执行某些步骤,但不支持所有组合。我想告诉用户他们可以调用脚本的所有可能方式,但是要以简洁的方式进行。
我想到的唯一正确的方法(即使用正确的符号指定所有可能性)是明确地在不同的行中陈述所有变体:
./script -p [-d <arg>]
./script -u -d <arg>
./script -r -e <arg> -f <arg> -g|(-h <arg> -i <arg>)
./script -pu [-d <arg>]
./script -ur -d <arg> -e <arg> -f <arg> -g|(-h <arg> -i <arg>)
./script -pur [-d <arg>] -e <arg> -f <arg> -g|(-h <arg> -i <arg>)
但这相当冗长。更糟糕的是,如果我在脚本中添加另一个步骤,我将必须列出该步骤的所有组合。
我可以解决的另一种方法是简单地将所有参数列为可选(因为所有步骤都不是必需的参数),但这当然是不正确的(没有一个参数总是强制性的,但无论如何都是需要提供一些参数:
./script [-p] [-u] [-r] [-d <arg>] [-e <arg>] [-f <arg>] [-g|(-h <arg> -i <arg>)]
坦率地说,我不知道哪一个更糟糕。那你怎么建议我写我的用法笔记?并且,如果可能的话,请建议一个通用的方法,因为许多具有多个选项的脚本都会出现这些问题。
答案 0 :(得分:2)
我从不喜欢那些漫长的使用线。虽然你可以说它们是必要的 它们并不是真正意义上的人类消费。我更喜欢这种风格 pacman documentation:
SYNOPSIS pacman <operation> [options] [targets] OPERATIONS -D, --database Operate on the package database. -Q, --query Query the package database. OPTIONS -b, --dbpath <path> Specify an alternative database location (a typical default is /var/lib/pacman). -r, --root <path> Specify an alternative installation root (default is /). EXAMPLES pacman -Ss ne.hack Search for regexp "ne.hack" in package database. pacman -S gpm Download and install gpm including dependencies.
或者,如果您想消除不同使用形式的歧义,您可以这样做 的coreutils:
SYNOPSIS ln [OPTION]... [-T] TARGET LINK_NAME (1st form) ln [OPTION]... TARGET (2nd form) ln [OPTION]... TARGET... DIRECTORY (3rd form) ln [OPTION]... -t DIRECTORY TARGET... (4th form) SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...