有关linux shell的参数和选项之间的区别

时间:2012-09-19 14:30:47

标签: linux shell

我目前正在参加Unix / Linux课程的介绍,我们遇到了一个问题,导师和我不同意。

cp -i file1 file2

前面的命令是哪个?

  • 甲。只有一个实用程序
  • B中。有一个选项
  • ℃。有三个论点
  • d。 file1将被复制为file2,之前将警告用户 发生重写
  • 电子。以上所有

我坚持认为它是 E 。上述所有的。教练已经确定了 D

很明显, A B D 都是正确的。挂断是 C 以及-i标志是否都是选项和参数。

我的逻辑是所有选项都是参数,但并非所有参数都是选项,因为列出了多个真实答案,那么在多选问题传统中答案很可能是 E 所有以上。

我无法在这个问题上找到吸烟枪,并认为我会把它扔给主人。

5 个答案:

答案 0 :(得分:10)

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

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

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

Brian W. Kernighan& Rob Pike," UNIX编程环境"

答案 1 :(得分:2)

manual page here州:

  

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

这似乎意味着在这个特定问题的背景下,至少,你应该认为选项是参数。否则它变得非常递归并且毫无意义。

我认为教练应该接受你的解释,这对于大多数典型案例来说真的是分裂。

答案 2 :(得分: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则不一样。我会说选项是一种特殊的参数。

答案 3 :(得分:0)

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

cp -i file1 file2

正确答案是A B和D,但不是C.

由于-i是一个选项,file1file2是参数。通常,选项被视为更改应用程序或命令的行为,而不作为参数。

我认为由于它是-i的行为更改选项(或参数),您是否将cp视为原始应用程序的参数,这取决于语义,但它在英语中被认为是选项不是争论。

这就是我如何定义差异并保持命令的两个部分之间的差异。

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

修改

我同意@unwind这是分裂的事实,实际上很多时候归结为情景和观点。他甚至真的标记它真是太糟糕了,他应该知道这是一个主观问题。当充满主观问题时,测试是完全不公平的。

答案 4 :(得分:0)

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