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

Tim*_*Tim -5 bash

来自 Bash 手册

bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c string [argument ...]
Run Code Online (Sandbox Code Playgroud)

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

  1. -c它接受一个选项参数或不带任何选项参数的选项?我想它需要一个选项参数。

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

    例如,在以下命令中,是mycommandoption -cof的选项参数bash,还是 ? 的非选项参数bash

    bash -c mycommand
    
    Run Code Online (Sandbox Code Playgroud)
  2. 任何剩余参数”是否意味着所有非选项参数 bash

    在以下命令中,将非选项参数arg1arg2tobash传递bashmycommand并用作命令行参数是否正确mycommand

    bash -c mycommand arg1 arg2
    
    Run Code Online (Sandbox Code Playgroud)

    以下两个命令是否等效?它们之间有什么区别?

    bash -c mycommand arg1 arg2
    bash -c 'mycommand arg1 arg2' 
    
    Run Code Online (Sandbox Code Playgroud)

谢谢。

Mic*_*mer 6

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

例如,在

bash -c mycommand
Run Code Online (Sandbox Code Playgroud)

mycommand' 是 bash 选项 -c 的选项参数,还是 bash 的非选项参数?

它是 的非选项参数bash,您可以通过在它们之间添加更多选项来简单地看到:

bash -c -i 'echo 1'
Run Code Online (Sandbox Code Playgroud)

bash -c mycommand arg1 arg2
Run Code Online (Sandbox Code Playgroud)

bash 将非选项参数 arg1 和 arg2 传递给 mycommand 并用作 mycommand 的命令行参数是否正确?

不。再试一次:

bash -c echo arg1 arg2
Run Code Online (Sandbox Code Playgroud)

以下两个命令是否等效?它们之间有什么区别?

bash -c mycommand arg1 arg2
bash -c 'mycommand arg1 arg2' 
Run Code Online (Sandbox Code Playgroud)

它们不是等价的。一,mycommand arg1 arg2跑。在另一个中,mycommand运行,Bash 称自己为arg1,并且$1arg2


所有这些似乎都可以从轻微的实验中受益。