如果我跑了 sh -c "prog arg1 arg2 arg3" sh -c prog arg1 arg2 arg3 然后运行prog,不带任何参数。但是争论会怎样呢?sh只是默默地忽略了它们,还是它们起到了某种作用?这个 man page
sh -c "prog arg1 arg2 arg3"
sh -c prog arg1 arg2 arg3
-c字符串 如果存在-c选项,则从字符串读取命令。如果字符串后面有参数,则会将它们指定给位置参数,从$0开始。
-c字符串
如果存在-c选项,则从字符串读取命令。如果字符串后面有参数,则会将它们指定给位置参数,从$0开始。
据我所知,“字符串后面的参数”没有指定给位置参数。
额外的参数确实分配给了位置参数。 $1 , $2
$1
$2
$ sh -c 'echo "0=$0; 1=$1; 2=$2"' foo bar baz 0=foo; 1=bar; 2=baz
如果你想让他们通过 到 prog ,你必须写下:
prog
sh -c 'prog "$1" "$2" "$3"' sh arg1 arg2 arg3
sh -c 'prog "$@"' sh arg1 arg2 arg3
(注意我已经准备好了 sh $0 设置为shell的名称,而不是 arg1 .)
sh
$0
arg1