我将此脚本称为:./script_name 604
#!/bin/bash
switchedChannel=($1)
channelArray=('108' '162' '163' '604' '141' '113')
for array_item in "${channelArray[@]}"; do
if [[ $array_item == ${switchedChannel[0]} ]] then
"$array_item MATCHES"
fi
done
有没有办法让array_item的索引匹配(或以其他方式获取数组中匹配项的位置),而不是简单地使用var作为计数器并使用它来进行迭代?
总会有匹配,但数组值是唯一的,因此只有一个匹配。
(我问,因为我需要对不匹配的数组项做一些事情,所以我的想法是从数组中删除匹配的项。我可以将不匹配的项移动到一个新的数组,这对于一个简短的列表,但最好在匹配完成后立即终止循环。)
答案 0 :(得分:4)
"${!array[@]}"
将迭代索引,而不是值。
#!/bin/bash
switchedChannel=$1
channelArray=('108' '162' '163' '604' '141' '113')
for array_idx in "${!channelArray[@]}}"; do
array_item=${channelArray[$array_idx]}
if [[ $array_item = "$switchedChannel" ]] then
"$array_item MATCHES at index $array_idx"
fi
done
那就是说,对于你的用例 - 你在查找的任何内容都是非负整数 - 你可以做得更好:
declare -a channelArray=( [108]=1 [162]=2 [163]=3 [604]=4 [141]=5 [113]=6 )
echo "${channelArray[$switchedChannel]}"
这将创建一个稀疏数组,其中键为数字108
,162
等;值为1
,2
,3
等。