gpt4 book ai didi

arrays - ksh 中数组的优雅使用

转载 作者:行者123 更新时间:2023-12-02 01:19:24 27 4
gpt4 key购买 nike

我正在尝试在 ksh 中构建一种属性集。

我认为最简单的方法是使用数组,但语法太让我难受了。

我想要的是

  1. 在配置文件中构建具有名称和属性的任意大小的数组。
  2. 迭代该列表中的每个项目并获取该属性。

我理论上希望我能做的事情是这样的

MONITORINGSYS={
SYS1={NAME="GENERATOR" MONITORFUNC="getGeneratorStatus"}
SYS2={NAME="COOLER" MONITORFUNC="getCoolerStatus"}
}

然后,能够执行以下操作:

for CURSYS in $MONITORINGSYS
do
CSYSNAME=$CURSYS.NAME
CSYSFUNC=$CURSYS.MONITORFUNC

REPORT="$REPORT\n$CSYSNAME"

CSYSSTATUS=CSYSFUNC $(date)
REPORT="$REPORT\t$CSYSSTATUS"
done
echo $REPORT

嗯,这不是真正的编程,但我想你明白了..

我该怎么做?

[编辑]

我并不是说我想使用关联数组。我这样说只是为了让我的问题更清楚......即如果循环类似于:

for CURSYS in $MONITORINGSYS
do
CSYSNAME=${CURSYS[0]}
CSYSFUNC=${CURSYS[1]}

REPORT="$REPORT\n$CSYSNAME"

CSYSSTATUS=CSYSFUNC $(date)
REPORT="$REPORT\t$CSYSSTATUS"
done
echo $REPORT

这同样适用于配置文件。我只是在寻找一种使其可读性最低的语法。

干杯

最佳答案

不太确定您想要什么...Kornshell 可以处理关联数组和索引数组。

但是,Kornshell 数组是一维的。通过使用 $() 和 eval 可以使用间接来模拟二维数组。我在较旧的 Perl 4.x 和 Perl 3.x 中这样做过几次,但这很痛苦。如果您想要多维数组,请使用 Python 或 Perl。

唯一的事情是您必须通过 typedef 命令声明数组:

$ typeset -A foohash    #foohash is an associative array
$ typeset -a foolist #foolist is an integer indexed array.

也许你的脚本看起来像这样

typeset -a sysname
typeset -a sysfunct

sysname[1] = "GENERATOR"
sysname[2] = "COOLER"
sysfunc[1] = "getGeneratorStatus"
sysfunc[2] = "getCoolerStatus"

for CURSYS in {1..2}
do
CSYSNAME="${sysname[$CURSYS]}"
CSYSFUNC="${sysfunc[$CURSYS]}"
REPORT="$REPORT\n$CSYSNAME"
CSYSSTATUS=$(eval "CSYSFUNC $(date)")
REPORT="$REPORT\t$CSYSSTATUS"
done
echo $REPORT

关于arrays - ksh 中数组的优雅使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com