命令参数和参数 - 正确的输入方式?

命令参数和参数 - 正确的输入方式?

这是正确的方法- 用空格分隔参数和形参,还是不分隔?

你应该把论点分开还是把它们放在一起?

例子:

<command> -D 192.168.0.100 -p 80
<command> -cvvfz

或者:

<command> -D192.168.0.100 -p80
<command> -c -vv -f -z

有些程序是否只接受一种“风格”,或者它根本重要吗?一般来说

答案1

一些节目只接受一种风格。非此即彼。

任何使用的东西getopt()都应该接受-xfooand -x foofor-x带有参数的选项。但是,并非所有程序都使用getopt().选修的参数是另一回事,它们可能不适用于-x foo,但可能需要-xfoo,因为否则很难在没有参数的情况下给出选项。

至于您“应该”使用哪一个,这是一个偏好问题,每个人都可能有自己的意见。

答案2

有些程序需要一种样式,有些则不需要。例如:

mysql -ph 10.1.1.1  

将尝试使用密码mysql连接。localhosth

mysql -p -h 10.1.1.1

另一方面将连接10.1.1.1并提示输入密码。

答案3

这由实用程序来定义。有些接受其中一种或两种形式。

POSIX 实用程序约定,参数语法部分给出了这个模板

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

并要求选项参数与其选项之间用空白字符分隔,除非选项参数是可选的,在这种情况下不应使用分隔符。然后...

POSIX.1-2017 中有一些例外情况,以确保历史应用程序的持续运行。

在下一节实用程序语法指南中,指南 7 指出选项参数不应该是可选的。

如果从所有这些混乱中清楚地看出一件事,那就是关于标志和参数之间的空白没有任何明确的规则。

传达信息的具体示例:

Syntax error                        Syntactically correct
xclip -ir <<< ABC                   xclip -i -r <<< ABC
xkbcomp -I /home/user "main" :0     xkbcomp -I/home/user "main" :0
rename -e's/f/x/' f                 rename -e 's/f/x/' f

作为旁注,通知准则 3 指出“每个选项名称应该是单个字母数字字符”。您可以想出大量使用多字符选项名称的实用程序示例。

答案4

这取决于程序,但是一般来说选项与其值之间必须有空格。

某些应用程序/实用程序接受--option=value参数,在这种情况下不能有空格。

相关内容