在Shell脚本中,"set -- "$progname" "$@""的含义是什么?

7
我目前从我们的configure.ac构建脚本中阅读到这一行。我在谷歌上搜索了答案,但没有找到。我认为这是一个shell脚本,但是特别是对于--这是什么意思呢?
set -- "$progname" "$@"
2个回答

11

来自 help set:

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

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

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


5

-- 是bash内置命令,也是很多Unix命令用来表示命令选项结束的符号。因此,如果你有像下面这样的内容:

grep -- -v file

-v 不会被解释为grep选项,而是作为参数传入(因此你可以用grep查找-v)。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接