como obter os índices bash da matriz de parâmetros

0

eu quero índices de parâmetros,

e pode obtê-lo por dummy var:

dummy=( $@ )
echo ${!dummy[@]}

mas existe uma maneira direta de obtê-los, algo como

$!@ ... not working
$!* ... not working

... ou algo parecido?

NOTA: a função original que eu quero ter sem arr var é esta:

function indexof()
{  search="$1"; shift; arr=( $@ ) 
   for i in "${!arr[@]}"; do [ "$search" == "${arr[$i]}" ] && return $i; done
   return -1
}
    
por MetNP 22.12.2016 / 02:58

3 respostas

1

Você pode calcular a partir do número de argumentos:

seq ${#@}
    
por 22.12.2016 / 03:16
0

Você pode usar o formulário 'arithmetic-for':

indexof(){ search=$1; shift 
    for(( i=1; i<=$#; i++ )); do [[ $search == ${!i} ]] && return $i; done
    return -1 # as an old LISPer I'd prefer 0 for the notfound case
}

Não é particularmente melhor (IMO), mas diferente.

    
por 22.12.2016 / 10:10
0

Você não precisa de um array fictício. Você pode usar uma variável de contador:

indexof() {
    search="$1"; shift
    i=0
    for arg; do
        [ "$search" = "$arg" ] && return $i
        ((i++))
    done
    return -1
}

Observe que for arg; do usa "$@" por padrão, é por isso que in "$@" pode ser omitido.

    
por 22.12.2016 / 10:22