Dentro do meu script bash, eu gostaria de analisar zero, um ou dois parâmetros (o script pode reconhecê-los) e depois encaminhar os parâmetros restantes para um comando chamado no script. Como eu posso fazer isso?
Dentro do meu script bash, eu gostaria de analisar zero, um ou dois parâmetros (o script pode reconhecê-los) e depois encaminhar os parâmetros restantes para um comando chamado no script. Como eu posso fazer isso?
Respostas:
Use o shift
comando interno para "comer" os argumentos. Em seguida, chame o processo filho e passe o "$@"
argumento para incluir todos os argumentos restantes. Observe as aspas, elas devem ser mantidas, pois fazem com que a expansão da lista de argumentos seja citada corretamente.
$@
trata essencialmente cada elemento da matriz como uma sequência de caracteres citada - eles são transmitidos sem oportunidade de expansão. Também garante que cada um seja visto como uma palavra separada. Esta explicação junto com um script de teste demonstrando a diferença está aqui: tldp.org/LDP/abs/html/internalvariables.html#APPREF
O bash usa o comando shift :
por exemplo shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 produz
1
2 3
$1
sem citá-los como "$1"
, o shell executará a divisão de palavras, portanto, por exemplo foo bar
, será encaminhado como foo
e bar
separadamente.
O Bash suporta parâmetros de subconjunto (consulte Subconjuntos e substrings ), para que você possa escolher quais parâmetros processar / passar assim.
abra um novo arquivo e edite-o: 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}"
executá-lo:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
o resultado é:
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