该命令行中有多少个参数?
[me@localhost]$ ls -isw 40 /usr
有人说只有一个,/usr
因为40
是开关的参数w
而不是命令,有人说是两个,因为除了命令和开关之外的所有内容都被视为参数,询问“命令的参数”或“开关的参数”。
哪一个是正确的?
答案1
共有三个参数:-isw
、40
和/usr
。
当解析命令行参数时,GNUls
实用程序将看到三个选项:-i
,-s
, 和-w
这40
是一个选项参数到-w
选项。
最后/usr
是一个操作数(既不是选项也不是选项参数)。
一个论点是
在 shell 命令语言中,传递给实用程序的参数,相当于函数
argv
之一创建的数组中的单个字符串exec
。参数是命令名称后面的选项、选项参数或操作数之一。
这告诉我们这ls -isv 40 /usr
是一个带有三个参数的命令。如果ls
是我们自己编写的 shell 脚本,那么$#
该脚本中特殊变量的值就是3
以特定方式调用该脚本时的值。
一个选项是
命令的参数,通常用于指定实用程序默认行为的更改。
不采用的选项选项参数可以与以下选项一起写为单个参数,即-i -s -w 40
可以写为-isw 40
。该命令ls -i -s -w 40 /usr
有五个参数。
一个选项参数是
某些选项后面的参数。在某些情况下,选项参数包含在与选项相同的参数字符串中,在大多数情况下,它是下一个参数。
因此,-w 40
可以写为-w40
,在这种情况下,该命令将ls -isw40 /usr
仅包含两个单独的参数。
一个操作数是
命令的参数,通常用作向实用程序提供完成其处理所需的信息的对象。操作数通常遵循命令行中的选项。
这里的定义来自POSIX。
ls
另请注意,如果实用程序具有完全不同的语义,则 以下情况可能为真:sw
可以是 option 的选项参数-i
(或者w
可以是 的选项参数-s
),并且40
和都/usr
可以是操作数。