全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1936|回复: 24
打印 上一主题 下一主题

shell根据数组元素获取下标

[复制链接]
跳转到指定楼层
1#
发表于 2023-3-31 22:05:50 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
已知根据下标获取元素的写法是
a=(14 25 39 46 52)
echo ${a[2]}
输出结果是 39

那么根据元素如何查询该元素的对应下标呢?
2#
 楼主| 发表于 2023-3-31 22:09:20 | 显示全部楼层
heihai 发表于 2023-3-31 22:08
不同下标相同数据呢,要怎么判断

输出两个不同的下标值
3#
 楼主| 发表于 2023-3-31 22:12:35 | 显示全部楼层
HOH 发表于 2023-3-31 22:10
这位同学,我布置的作业请自己完成

不会就不要凑热闹
4#
 楼主| 发表于 2023-3-31 22:19:13 | 显示全部楼层
yanzhiling2002 发表于 2023-3-31 22:17
计算机的排序是从0开始的,不是常识中的1.

你看到的a2 ,在计算机执行里,是第三个数。

我没说错啊,下标2对应的元素是39
5#
 楼主| 发表于 2023-3-31 22:39:26 | 显示全部楼层
gundam06ms 发表于 2023-3-31 22:29
你说的不清不楚,会重复吗?是大小排列好的么?

不必大小排列,就是我说的自定义排列
6#
 楼主| 发表于 2023-3-31 22:40:45 | 显示全部楼层
yanzhiling2002 发表于 2023-3-31 22:25
不好意思,没看清楚要求

我能想到的就是键值对用shell操作比较麻烦

所以根据元素求下标是没有这种操作吗?
7#
 楼主| 发表于 2023-3-31 22:42:30 | 显示全部楼层
yanzhiling2002 发表于 2023-3-31 22:28
我给你问了一下chatgpt

在shell中,可以使用数组来存储元素,并使用循环结构来查找元素对应的下标。 例如 ...

chatgpt完全帮不上忙,它说的还是根据下标求元素,这个不用它来回答,反过来根据元素求下标呢?
8#
 楼主| 发表于 2023-4-1 12:18:20 | 显示全部楼层
irony 发表于 2023-3-31 23:15
shell里已知数组为a=(14 25 39 46 52),那么如何获取元素39的数组下标?
在bash shell中,您可以使用以下脚 ...

非常感谢你使用chatgpt获取到了解答方案,不过chatgpt只能提供一个解决问题的思路,chatgpt给出的脚本有两个错误,index不需预先赋值,"${a}"是错误写法,应该是"${a[$i]}",正确的脚本如下

#!/bin/bash
#
a=(14 25 39 46 52)
value=39
for i in ${!a[@]}
do
    #if [[ ${a[$i]} -eq $value ]]
    if ((${a[$i]}==$value))
    then
        break
    fi
done
echo "Index of $value is $i"
9#
 楼主| 发表于 2023-4-1 12:28:01 | 显示全部楼层
dvbhack 发表于 2023-4-1 10:55
单个元素的,例如查询 "2",返回 "1"
多个相同元素的,例如查询 "3",返回 "2,5" ...

你的脚本真的很有大佬风范,又是函数又是传递变量参数,不过有一个最简洁明了的写法,可以同时输出相同元素的不同下标值,如下

#!/bin/bash
#
a=(1 2 3 4 5 3 4)
value=4
#value=3
for i in ${!a[@]}
do
    #if [[ ${a[$i]} -eq $value ]]
    if ((${a[$i]}==$value))
    then
        echo "Index of $value is $i"
    fi
done
10#
 楼主| 发表于 2023-4-1 12:30:45 | 显示全部楼层
coolloves 发表于 2023-4-1 10:14
a=(14 25 39 46 46 52)
target=46

不必先转换成字典,直接遍历即可

#!/bin/bash
#
a=(14 25 39 46 46 52)
value=46
for i in ${!a[@]}
do
    #if [[ ${a[$i]} -eq $value ]]
    if ((${a[$i]}==$value))
    then
        echo "Index of $value is $i"
    fi
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-15 16:11 , Processed in 0.065342 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表