매개변수 배열의 bash 인덱스를 얻는 방법은 무엇입니까?

매개변수 배열의 bash 인덱스를 얻는 방법은 무엇입니까?

매개변수 인덱스를 원합니다.

그리고 더미 var를 통해 얻을 수 있습니다.

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

하지만 그것들을 얻을 수 있는 직접적인 방법이 있나요?

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

... 아니면 그런 것?

참고: arr var가 없는 원래 함수는 다음과 같습니다.

function indexof()
{  search="$1"; shift; arr=( $@ ) 
   for i in "${!arr[@]}"; do [ "$search" == "${arr[$i]}" ] && return $i; done
   return -1
}

답변1

매개변수 수를 기준으로 계산할 수 있습니다.

seq ${#@}

답변2

더미 배열이 필요하지 않습니다. 카운터 변수를 사용할 수 있습니다.

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

이는 for arg; do기본적으로 사용되므로 생략할 수 있습니다."$@"in "$@"

답변3

기록에 따르면 zshindexOf 함수는 다음과 같습니다.

$ set foo bar baz bar foo
$ echo $@[(i)bar] $@[(I)bar]
2 4

( $2이다첫 번째일치( i아래 첨자 플래그 사용),$4마지막일치( I아래 첨자 플래그)).

답변4

대신 "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
}

특별히 좋지는 않지만(IMO) 다릅니다.

관련 정보