como percorrer os argumentos em um script bash

13

Eu gostaria de escrever um script bash com quantidade desconhecida de argumentos.

Como posso percorrer esses argumentos e fazer algo com eles?

Uma tentativa errada seria assim:

#!/bin/bash
for i in $args; do 
    echo $i
done
    
por rubo77 14.06.2013 / 00:33

2 respostas

26

Há uma sintaxe especial para isso:

for i do
  echo "$i"
done

Mais geralmente, a lista de parâmetros do script ou função atual está disponível através da variável especial $@ .

for i in "$@"; do
  echo "$i"
done

Observe que você precisa das aspas duplas em torno de $@ , caso contrário, os parâmetros passam por expansão de curinga e divisão de campo. "$@" é mágico: apesar das aspas duplas, ele se expande em tantos campos quanto parâmetros.

print_arguments () {
  for i in "$@"; do echo "$i"; done
}
print_arguments 'hello world' '*' 'special   !\characters'    # prints 3 lines
print_arguments ''                                            # prints one empty line
print_arguments                                               # prints nothing
    
por 14.06.2013 / 01:45
5
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Você deve citar $@ porque é possível que os argumentos contenham espaços (ou novas linhas, etc.) se você citá-los ou os escape com \ . Por exemplo:

./myscript one 'two three'

São dois argumentos em vez de três, devido às cotações. Se você não citar $@ , esses argumentos serão divididos no script.

    
por 14.06.2013 / 00:42