Ответы:
Используйте shift
встроенную команду, чтобы «съесть» аргументы. Затем вызовите дочерний процесс и передайте ему "$@"
аргумент для включения всех оставшихся аргументов. Обратите внимание на кавычки, они должны быть сохранены, так как они приводят к правильному расширению списка аргументов.
$@
по сути, каждый элемент массива обрабатывается как строка в кавычках - они передаются без возможности расширения. Это также гарантирует, что каждый рассматривается как отдельное слово. Это объяснение вместе с тестовым сценарием, демонстрирующим разницу, находится здесь: tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash использует команду shift :
например, shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 производит
1
2 3
$1
без кавычек "$1"
, то оболочка выполнит разбиение слов, например, foo bar
будет переадресовано как foo
и bar
отдельно.
Bash поддерживает параметры поднабора (см. Подмножества и подстроки ), поэтому вы можете выбрать, какие параметры обрабатывать / передавать следующим образом.
откройте новый файл и отредактируйте его: vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
запустить его:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
результат:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10