什么是“set - ”$ progname“”$ @“”表示在shell脚本中?

时间:2013-11-20 05:44:13

标签: linux shell

我目前从configure.ac构建脚本中读取此行。我在Google上搜索了答案,但没有找到答案。

我认为它是shell脚本,但这意味着什么,尤其是--

set -- "$progname" "$@"

2 个答案:

答案 0 :(得分:2)

--是一个内置的bash,以及许多unix命令用来表示命令选项结束的东西。所以如果你有类似的东西:

grep -- -v file

-v不会被解释为grep选项,而是一个参数(因此你可以grep for -v)。

$@是传递给脚本的所有参数的列表(我假设set命令是其中的一部分)。

--确保作为脚本一部分传入的任何选项不会被解释为set的选项,而是作为$progname变量表示的命令的选项。

答案 1 :(得分:2)

来自help set

  --  Assign any remaining arguments to the positional parameters.
      If there are no remaining arguments, the positional parameters
      are unset.

--的原因是确保即使"$progname""$@"包含破折号,也不会将它们解释为命令行选项。

set更改位置参数,该参数存储在$@中。因此,在这种情况下,它会将"$progname"附加到脚本接收的位置参数的开头。