16

我目前正在参加 Unix / Linux 入门课程,我们遇到了一个问题,我和讲师不同意。

cp -i file1 file2

关于前面的命令,哪个是正确的?

  • A. 只有一个实用程序
  • B. 有一种选择
  • C. 有三个论点
  • D. file1 将被复制为 file2 并在覆盖发生之前警告用户
  • E. 以上所有

我坚持认为它是E。上述所有的。导师选择了D

显然ABD都是正确的。挂断是C以及-i标志是否既是选项又是参数。

我的逻辑是所有选项都是参数,但并非所有参数都是选项,并且由于列出了多个正确答案,因此在多项选择题传统中,答案很可能是上述所有选项。

我无法在这个问题上找到确凿的证据,并认为我会把它扔给大师们。

4

5 回答 5

10

我知道这是一个旧线程,但我想为其他可能遇到类似分歧的人添加以下内容。

 $ ls -l junk
-rw-r--r-- 1 you     19 Sep 26 16:25 junk

“命令行上程序名称后面的字符串,-l 例如junk上面的示例,称为程序的参数。参数通常是命令使用的选项或文件名。”

Brian W. Kernighan 和 Rob Pike,“UNIX 编程环境”

于 2015-04-08T21:24:35.243 回答
2

这里的手册页指出:

多头期权的强制性参数对于空头期权也是强制性的。

这似乎意味着在这个特定问题的背景下,至少,您不应该将选项视为论点。否则它会变得非常递归并且毫无意义。

我认为讲师应该接受您的解释,对于大多数典型情况,这确实令人毛骨悚然。

于 2012-09-19T14:40:21.580 回答
0

嗯...我个人喜欢区分选项和参数,但是,从技术上讲,您可以说选项是参数。我会说你是对的,但我认为你的导师选择了D,因为他不希望你让他们感到困惑。例如,以下等价于上述命令...:

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG1 $ARG2 $ARG3

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG2 $ARG1 $ARG3

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG2 $ARG3 $ARG1

...cp $ARG1 $ARG3 $ARG2而不一样。我会说选项是一种特殊类型的参数。

于 2012-09-19T14:54:29.847 回答
0

这就是我被教导的方式,在这种情况下是这样说的:

cp -i file1 file2

正确答案是 AB 和 D,而不是 C。

因为-i是一个选项,file1并且file2是参数。通常,选项被认为可以改变应用程序或命令的行为,而参数则不会。

我认为是否考虑-i原始应用程序的参数取决于语义,因为它是改变行为的选项(或参数),cp但在英语中它被认为是选项而不是参数。

这就是我仍然定义差异并保持命令的两个部分之间的差异的方式。

作为另一个命令示例,cronjobs。我经常使用 PHP cronjobs,而且我通常有与命令相关的选项和参数。选项(在我看来)总是用于定义额外的行为,而参数旨在为应用程序及其行为提供完成操作所需的数据。

编辑

我同意@unwind 的观点,这让人毛骨悚然,实际上很多时候都归结为场景和意见。连自己在上面都打上记号也太糟糕了,他应该知道这是个主观问题。充满主观问题的测试是完全不公平的。

于 2012-09-19T15:04:14.123 回答
0

我认为“争论”一词在不同的上下文中以不同的方式使用,这似乎是分歧的根源。不过,为了支持您的立场,请注意cp最有可能编写的 C 运行时将程序入口点声明为main(argc, argv)(类型已省略),这似乎至少表明那些设计 C 架构/库/等的人。将选项视为参数的子集。然后当然选项可以有自己的论点(不同的上下文)等......

于 2012-09-19T15:07:25.677 回答