O loop for
no shell Bash / POSIX é semelhante a, e. o loop for
no Python: a variável loop pega os valores listados, um a um, e o corpo do loop é executado uma vez para cada valor.
Então isso:
for x in foo bar; do
echo "$x"
done
echo finally x is "$x"
é semelhante a
x=foo # assign value
echo "$x" # loop body
x=bar # same with the second value...
echo "$x"
echo finally x is "$x" # this isn't part of the loop body
exceto que você não precisa repetir o corpo do loop. Se tivermos uma variável de matriz A
, for x in "${A[@]}"; do...
faz um loop sobre os valores da matriz. Da mesma forma, for x in "$@"; do...
faz um loop sobre os parâmetros posicionais, ou seja, os argumentos da linha de comando, pois são para os quais "$@"
se expande. E for x; do
é basicamente uma abreviação para for x in "$@"; do
Então, isso imprimiria todos os argumentos da linha de comando:
for x; do # or: for x in "$@"; do
printf "%s\n" "$x"
done
Para acessar os argumentos diretamente pelo índice, use $1
para o primeiro, $2
para o segundo argumento, etc ...
printf "the first arg is %s and the second is %s\n" "$1" "$2"