Passar os parâmetros da linha de comando para um programa dentro do shell script

10

Quanto a ./script.sh arg1 [arg2 arg3 ...] , os argumentos da linha de comando arg1 , arg2 , ... podem ser obtidos por $1 , $2 , ... Mas o número de argumentos é NÃO fixo.

No script de shell, quero passar os argumentos começando de arg2 para um programa,

#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...

Como eu poderia fazer isso, pois poderia haver um ou mais argumentos?

    
por Lee 22.08.2016 / 01:44

2 respostas

13

A maneira usual seria salvar uma cópia de arg1 ( "$1" ) e mudar os parâmetros em um, então você pode se referir a toda a lista como "$@" :

#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"

O bash tem algum suporte a matriz, é claro, mas não é necessário para a pergunta como foi feita.

Se mesmo arg1 for opcional, você deve verificar isso da seguinte forma:

if [ $# != 0 ]
then
    arg1="$1"
    shift 1
fi
    
por 22.08.2016 / 01:46
8

Você pode fatiar os parâmetros posicionais usando a expansão de parâmetros. A sintaxe é:

${parameter:offset:length}

Se length for omitido, será considerado o último valor.

Como você passaria do segundo para o último argumento, você precisa:

${@:2}

Exemplo:

$ foo() { echo "${@:2}" ;}

$ foo bar spam egg
spam egg
    
por 22.08.2016 / 06:10