Bash按args选择数组元素的位置

Căt*_*ilă 2 bash

我想通过给出一个arg来创建一个返回元素数组位置的bash脚本.请参阅下面的代码,我使用

#!/bin/bash
args=("$@")
echo ${args[0]}
test_array=('AA' 'BB' 'CC' 'DD' 'EE')
echo $test_array
elem_array=${#test_array[@]}
for args in $test_array
do
        echo 
done
Run Code Online (Sandbox Code Playgroud)

最后,我应该输出如下:

$script.sh DD
4
Run Code Online (Sandbox Code Playgroud)

thk*_*ala 6

#!/bin/bash

A=(AA BB CC DD EE)

for i in "${!A[@]}"; do
        if [[ "${A[i]}" = "$1" ]]; then
                echo "$i"
        fi
done
Run Code Online (Sandbox Code Playgroud)

请注意,该"${!A[@]}"表示法给出了数组中有效索引的列表.一般来说,你不能只从0到0 "${#A[@]}" - 1,因为索引不一定是连续的.如果数组元素分配中存在间隙或者某些元素未被设置,则索引范围中可能存在间隙.

上面的脚本将输出数组的所有索引,其内容等于脚本的第一个命令行参数.

编辑:

在您的问题中,您似乎希望将结果作为基于一个数组的索引.在这种情况下,您可以将结果增加一个:

#!/bin/bash

A=(AA BB CC DD EE)

for i in "${!A[@]}"; do
        if [[ "${A[i]}" = "$1" ]]; then
                let i++;

                echo "$i"
        fi
done
Run Code Online (Sandbox Code Playgroud)

但请记住,在与基于零的数组一起使用之前,必须减少此索引.