我想要参数索引,
并可以通过 dummy 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)但不同。