Відповіді:
Використовуйте 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