`bash -c mycommand arg1 arg2`中的参数

`bash -c mycommand arg1 arg2`中的参数

来自 Bash 手册

bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c string [argument ...]

-c读取并执行命令第一个非选项参数 处理完选项后,然后退出。任何剩余的参数被分配给位置参数,从 开始$0

  1. -c选项是带有选项参数还是不带有任何选项参数?我想这需要一个选项参数。

    为什么它说“-c读取并执行命令”第一个非选项参数" 而不是 " 从选项参数到 -c"?

    例如,在以下命令中, 是的选项的mycommand选项参数,还是?的非选项参数?-cbashbash

    bash -c mycommand
    
  2. 做 ”任何剩余的参数bash" 是指?的所有非选项参数

    在以下命令中,非选项参数arg1arg2to由to bash传递并用作 的命令行参数是否正确?bashmycommandmycommand

    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,并且$1arg2


所有这些问题似乎只要稍加尝试就能得到解决。

相关内容