Как передать параметры другой команде в скрипте bash? - PullRequest
127 голосов
/ 08 октября 2009

В моем bash-скрипте я хотел бы проанализировать ноль, один или два параметра (скрипт может их распознать), а затем переслать оставшиеся параметры команде, вызванной в скрипте. Как я могу это сделать?

Ответы [ 3 ]

198 голосов
/ 08 октября 2009

Используйте встроенную команду shift, чтобы «съесть» аргументы. Затем вызовите дочерний процесс и передайте ему аргумент "$@", чтобы включить все остальные аргументы. Обратите внимание на кавычки, они должны быть сохранены, поскольку они приводят к тому, что расширение списка аргументов будет правильно заключено в кавычки.

26 голосов
/ 08 октября 2009

bash использует команду shift :

например. shifttest.sh:

#!/bin/bash
echo $1
shift
echo $1 $2

shifttest.sh 1 2 3 производит

1
2 3
15 голосов
/ 16 марта 2017

Bash поддерживает параметры поднабора (см. Подмножества и подстроки ), поэтому вы можете выбрать, какие параметры обрабатывать / передавать следующим образом.

  1. открыть новый файл и отредактировать его: vim r.sh:

    echo "params only 2    : ${@:2:1}"
    echo "params 2 and 3   : ${@:2:2}"
    echo "params all from 2: ${@:2:99}"
    
  2. запустите:

    $ chmod u+x r.sh
    $ ./r.sh 1 2 3 4 5 6 7 8 9 10
    
  3. результат:

    params only 2    : 2
    params 2 and 3   : 2 3
    params all from 2: 2 3 4 5 6 7 8 9 10
    
...