Use o argumento 2 até @ for loop

5

Eu tenho um shell skript:

#!/bin/bash
exec_command -k -q $1

for i in $@
do
  grep --color=always "$i" file
done

Eu chamo o script como

./grepskript -v searchstring1 searchstring2

Eu quero usar o primeiro argumento para o exec_command e todos os outros argumentos para o loop do . Como eu faria isso?

    
por Fl.pf. 29.03.2018 / 10:44

1 resposta

10

Use o comando shift para empurrar os argumentos posicionais conforme necessário. No seu caso, fazer shift 1 separaria $1 (ou seja, o primeiro argumento) do resto dos argumentos. Da mesma forma, shift 2 mudaria os primeiros 2 argumentos da lista de argumentos e assim por diante. E lembre-se sempre de citar suas variáveis / argumentos para não deixarem passar pela divisão de palavras pelo shell.

#!/bin/bash

exec_command -k -q "$1"
shift 1

for i in "$@"; do
  grep --color=always "$i" file
done

Consulte a página do manual shift para entender mais. Esta é uma opção compatível com POSIX disponível em shells.

Ou outra maneira de fazer ( bash specific) uma expansão baseada em índice na lista de argumentos $@ como abaixo para iniciar o loop do segundo elemento nas alas.

#!/bin/bash

exec_command -k -q "$1"

for i in "${@:2}"; do
  grep --color=always -- "$i" file
done

Além de iterar sobre os argumentos posicionais na primeira abordagem, você faz exatamente

for i; do
  grep --color=always -- "$i" file
done
    
por 29.03.2018 / 10:51

Tags