代码之家  ›  专栏  ›  技术社区  ›  Peter Hull

sh调用中的额外参数会发生什么变化?

sh
  •  1
  • Peter Hull  · 技术社区  · 6 年前

    如果我跑了 sh -c "prog arg1 arg2 arg3" sh -c prog arg1 arg2 arg3 然后运行prog,不带任何参数。但是争论会怎样呢?sh只是默默地忽略了它们,还是它们起到了某种作用?这个 man page

    -c字符串

    如果存在-c选项,则从字符串读取命令。如果字符串后面有参数,则会将它们指定给位置参数,从$0开始。

    据我所知,“字符串后面的参数”没有指定给位置参数。

    1 回复  |  直到 5 年前
        1
  •  1
  •   John Kugelman Michael Hodel    6 年前

    额外的参数确实分配给了位置参数。 $1 , $2

    $ sh -c 'echo "0=$0; 1=$1; 2=$2"' foo bar baz
    0=foo; 1=bar; 2=baz
    

    如果你想让他们通过 prog ,你必须写下:

    sh -c 'prog "$1" "$2" "$3"' sh arg1 arg2 arg3
    

    sh -c 'prog "$@"' sh arg1 arg2 arg3
    

    (注意我已经准备好了 sh $0 设置为shell的名称,而不是 arg1 .)

    推荐文章