免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1095 | 回复: 7

[文本处理] 新人请教-linux下shell编程变量替换问题 [复制链接]

论坛徽章:
0
发表于 2017-06-28 11:02 |显示全部楼层
我现在有shell。前面有一堆id数组的定义。
class_1_ids=(1 2 3)
class_2_ids=(3 6 9)
class_3_ids=(10 11 21)
后面需要根据选择对相印的ids进行处理。我现在是这么写的
select op_class in "class_1" "class_2" "class_3" "quit"; do
    break
done
if [[ ${op_class} = "class_1" ]]; then
    op_ids=("${class_1_ids[@]}")
elif [[ ${op_class} = "class_2" ]]; then
    op_ids=("${class_2_ids[@]}")
elif [[ ${op_class} = "class_3" ]]; then
    op_ids=("${class_3_ids[@]}")
fi
每次增加ids组都需要去修改if里增加一段判断
现在想让op_ids自动根据op_class进行组合
op_ids=("${${op_class}_ids[@]}")这样一直都说语法有错。
请问需要如果修改才能实现呢?谢谢各位大牛了。

论坛徽章:
0
发表于 2017-06-28 15:42 |显示全部楼层
eval op_ids="("`eval echo '$'{${op_class}_ids[@]}`")"

经过其他大神点拨。使用上述指令搞定。特地来结贴。希望能帮助到有需要的人

论坛徽章:
0
发表于 2017-06-28 15:44 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-06-28 15:46 编辑

【脚本大帝powershell】座下【抠脚大汉===本人】 前来分享,一个powershell二维数组的例子:

#二维数组当然是一元素中含两个值
$每元素含二个值_共三个元素的例子 = @((0,60000),(60001,120000),(120001,180000))
$每元素含二个值_共三个元素的例子[0][1]
$每元素含二个值_共三个元素的例子 += ,('猪都能懂','傻都会改')

$一个元素_并且是空的二维数组 = ,@(@(),@())
$一个元素_并且是null的二维数组 = New-Object  'system.array [][]' 1,2  #数组count为1,即【$一个元素_并且值是$null的二维数组[0]】。数组每一个元素含有2个元素。
$一个元素_并且是null的二维数组2 = ,@($null,$null)


二维数组具体例子为:
群共享---》ps命令行游戏,抽一张牌比大小poker_v1.05.ps1
其中:
$52张牌 = New-Object  "system.array [][]"  4,13
代表4个花色,每个花色13张牌。
-----------------------------------------------------
$三维数组 = New-Object  'system.array [][]' 1,2,3
$三维数组[0] 中含有:
$三维数组[0][0]
$三维数组[0][1]
两个元素
,,
而【$三维数组[0][0]】中,含有0,1,2,三个元素。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2017-06-28 15:47 |显示全部楼层
op_ids=$(eval echo \${${op_class}_ids[@]})

论坛徽章:
0
发表于 2017-06-29 09:46 |显示全部楼层
关阴月飞 发表于 2017-06-28 15:47
op_ids=$(eval echo \${${op_class}_ids[@]})

多谢回复。

论坛徽章:
0
发表于 2017-06-29 16:13 |显示全部楼层
op_ids=$(eval echo \${${op_class}_ids[@]})
也可以。但是op_ids是字符串类型。计算数组长度length=${#op_ids[@]}时是1.
eval op_ids="("`eval echo '$'{${op_class}_ids[@]}`")"
计算出来才是正确的长度。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2017-06-29 17:01 |显示全部楼层
回复 6# hyzhj2156

想保存成数组,你在外围加对括号就好了xx=(xxoo)

论坛徽章:
0
发表于 2017-06-29 19:21 |显示全部楼层
嗯嗯。是的,非常感谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP