此shell命令中的“-”(双破折号)是什么意思?


13

我有这个shell命令:

kill `cat -- $PIDFILE`

双重功能-在这里吗?为什么不使用

kill `cat $PIDFILE`

Answers:


20

--告诉cat不要尝试将其后的内容解析为命令行选项。

举例来说,想一想如果变量$PIDFILE定义为,在两种情况下会发生什么PIDFILE="--version"。在我的机器上,它们给出以下结果:

$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.

$ cat -- $PIDFILE
cat: --version: No such file or directory

3
值得注意的是,这种行为(虽然很常见)是由接收程序(即cat)而不是外壳定义的。
dmckee ---前主持人小猫,2010年

是否有任何有关编写自己的Shell脚本的文档或教程可以理解--命令行选项的结束?我见过使用getopts和其他技术的应用程序,但是没有讨论--
CMCDragonkai 2015年

3
@CMCDragonkai您无需在getopt(1)手册页中查找:“'-'参数之后的每个参数始终被解释为非选项参数”。
米卡·奥诺

1

POSIX.1-2017

POSIX还在以下位置指定了它:http : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2实用程序语法准则

准则10:

第一-论点,即不是一个选项形式参数应该被接受为指示选项的结束的定界符。以下所有自变量都应视为操作数,即使它们以'-'字符开头。

另请参阅:https : //unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.