매개변수 인덱스를 원합니다.
그리고 더미 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
기록에 따르면 zsh
indexOf 함수는 다음과 같습니다.
$ 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) 다릅니다.