Answers:
你是对的。来自man bash
:
-c string
如果-c
存在该选项,则从中读取命令string
。如果在后面有参数,则将string
它们分配给位置参数,以开头$0
。
这意味着bash -c 'echo $0' -l
回报-l
。
Unix命令中的约定是文件名排在最后(因为许多命令可以使用几乎无限数量的文件名)。换句话说,看起来不像标志/选项的第一件事被解释为filename [1],其后的所有内容也被解释为。
[1]如果使用以破折号开头的文件,则可以通过两种方式消除歧义:
./-foo
代替-foo
:rm ./-foobar
rm -- -foobar
。好的脚本编码惯例建议--
在未预先确定文件名的命令中使用“ fence”。
bash -c
需要一些东西。(2)必需的参数bash -c
可能不是文件(通常是命令),并且行为相同,这更多是约定不适用于此处的原因。(3)比较grep -f
。它需要一个文件名,并且不会影响后面的选项。实际上,这是更常见的行为,bash -c
非常独特。(4)您没有回答问题。