来自 Bash 手册
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c string [argument ...]
-c
读取并执行命令第一个非选项参数 处理完选项后,然后退出。任何剩余的参数被分配给位置参数,从 开始$0
。
-c
选项是带有选项参数还是不带有任何选项参数?我想这需要一个选项参数。为什么它说“
-c
读取并执行命令”第一个非选项参数" 而不是 " 从选项参数到-c
"?例如,在以下命令中, 是的选项的
mycommand
选项参数,还是?的非选项参数?-c
bash
bash
bash -c mycommand
做 ”任何剩余的参数
bash
" 是指?的所有非选项参数在以下命令中,非选项参数
arg1
和arg2
to由tobash
传递并用作 的命令行参数是否正确?bash
mycommand
mycommand
bash -c mycommand arg1 arg2
以下两个命令等效吗?它们之间有什么区别?
bash -c mycommand arg1 arg2 bash -c 'mycommand arg1 arg2'
谢谢。
答案1
为什么它说
-c
“从第一个非选项参数读取并执行命令”而不是“从选项参数到-c
”?例如,在
bash -c mycommand
mycommand' 是 bash 的选项 -c 的选项参数,还是 bash 的非选项参数?
它是 的非选项参数bash
,只需在两者之间添加更多选项即可看到:
bash -c -i 'echo 1'
在
bash -c mycommand arg1 arg2
bash 的非选项参数 arg1 和 arg2 由 bash 传递给 mycommand 并用作 mycommand 的命令行参数,这是否正确?
不,再试一次:
bash -c echo arg1 arg2
以下两个命令等效吗?它们之间有什么区别?
bash -c mycommand arg1 arg2 bash -c 'mycommand arg1 arg2'
它们并不等同。其一,mycommand arg1 arg2
跑步。在另一个mycommand
运行中,Bash 称其自身为arg1
,并且$1
是arg2
。
所有这些问题似乎只要稍加尝试就能得到解决。