我一直在思考这个问题,但我无论如何也想不出为什么答案是这样的。在这个命令行上,shell 向命令传递了多少个参数:<pig pig -x " " -z -r" " >pig pig pig
a. 8 b. 6 c. 5 d. 7 e. 9
第一个符号应该是重定向输入的符号,但网站不允许我使用它。[已修复。]
我看了看这个问题,说好吧……参数……不是选项,所以第二只猪,然后是“”,然后是 -r“”,第四只猪和第五只猪……-z 和 -x 是选项,所以我数了 5。答案是 b. 6。传递的第 6 个参数在哪里?
答案1
我认为您在什么才算是一个论点的语义问题上遇到了麻烦。
在命令行级别,选项是命令恰好要特殊对待的参数。(更具体地说:它们包含在传递给命令的 argv 数组中。)因此,根据“参数”的确切含义,它们可能会或可能不会包含在计数中。我怀疑它们被包括在内,但第二个“pig”没有(因为它是命令名,它不是一个参数)(好吧,好吧,它也包含在 argv 中,但是不算)(大部分情况下)。
为了说明我关于选项是特殊处理的参数的意思(以及区别的任意性),请考虑以下命令:
tar cv -f foo.tar bar
tar
是命令cv
是两个选项(create 和 verbose)。我知道它看起来不像,但tar
早于一致使用-
来引入选项,并且会将其第一个“参数”视为一个或多个选项,即使它不是以-
-f foo.tar
是另一种选择,它是参数(不同于一般命令参数)bar
是一个正常的命令参数(终于!)
请注意,这两个命令与上面的命令等效:
tar cvf foo.tar bar
tar cv -ffoo.tar bar
答案2
传递给程序的参数pig
是:
- -X
- “ “
- -z
- -r“ -r”
- 倒数第二头猪
- 最后一只猪
从编程角度来看,通常将所有内容argv
(除了argv[0]
)视为程序的参数。这包括“选项”标记——我的意思是,如果程序根本不采用任何选项,而是将“-x”之类的内容视为文件名,会怎么样?