这是正确的方法- 用空格分隔参数和形参,还是不分隔?
和你应该把论点分开还是把它们放在一起?
例子:
<command> -D 192.168.0.100 -p 80
<command> -cvvfz
或者:
<command> -D192.168.0.100 -p80
<command> -c -vv -f -z
有些程序是否只接受一种“风格”,或者它根本重要吗?一般来说?
答案1
一些节目做只接受一种风格。非此即彼。
任何使用的东西getopt()
都应该接受-xfoo
and -x foo
for-x
带有参数的选项。但是,并非所有程序都使用getopt()
.选修的参数是另一回事,它们可能不适用于-x foo
,但可能需要-xfoo
,因为否则很难在没有参数的情况下给出选项。
至于您“应该”使用哪一个,这是一个偏好问题,每个人都可能有自己的意见。
答案2
有些程序需要一种样式,有些则不需要。例如:
mysql -ph 10.1.1.1
将尝试使用密码mysql
连接。localhost
h
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
参数,在这种情况下不能有空格。