在shell中动态读取和存储变量中的值

在shell中动态读取和存储变量中的值,shell,sh,ksh,Shell,Sh,Ksh,我正在努力做到这一点 echo "Enter the number of fruits\n" read fruit echo $inp # this will print the number of fruits to enter 如果水果是4 脚本应该能够动态地要求用户输入[4]个水果,并将其存储到4个变量中,如下所示 fruit1=apple fruit2=jack fruit fruit3=pineapple fruit4=grapes 我试过下面的方法,但没用 for i in `

我正在努力做到这一点

echo "Enter the number of fruits\n"
read fruit

echo $inp # this will print the number of fruits to enter
如果水果是4

脚本应该能够动态地要求用户输入[4]个水果,并将其存储到4个变量中,如下所示

fruit1=apple
fruit2=jack fruit
fruit3=pineapple
fruit4=grapes
我试过下面的方法,但没用

for i in `seq 1 $fruit`
                    do
                            echo "Enter fruit$i\n"
                            read fruit[$i]
                            echo "fruit[$i]"
                    done

提前谢谢

您可以在每一步动态增长阵列。假设从计数开始,初始化空数组并逐个添加元素

count=4; fruits=(); 
for i in `seq "$count"`; 
       do read f; fruits+=( "$f" ); 
       done; 
echo "${fruits[@]}"
作品版本: 版本AJM 93t+2010-06-21


这与AIX中的BASH一起工作

这是兼容的
ksh88
-和
pdksh
-版本:

count=4
set -A fruits
i=0
while (( i < count )); do
    echo "Enter fruit$i"
    read fruits[i]
    (( i += 1 ))
done
echo "${fruits[@]}"
count=4
集-一个水果
i=0
而((i

在Solaris 8上使用
/bin/ksh
(ksh88)进行测试,在MirBSD上使用
pdksh
进行测试(其本机
mksh
支持
+=()
符号,但我在其上安装了其他shell以进行增量测试)。

\/箱/箱计数=4;水果=();对于
序列中的i“$count”
;读f;水果+=(“$f”);完成;echo“${fruits[@]}”。/ar.sh[2]:第2行出现语法错误:`('unexpected@ady6831983,您不会在ksh中得到该错误;这是POSIX sh的限制。@ady6831983,ksh的精确版本是什么?(另一方面,使用
seq
是一种代码味道;它不是POSIX sh或POSIX指定的实用程序的一部分,因此根本不能保证存在)。@Karakfa无论如何,我可以在AIX上运行它?您的shebang
#!/bin/sh
#!/bin/ksh
?还有什么?顺便说一句,这个主题(数组的间接变量赋值)BashFAQ#6(是的,它涵盖了除bash之外的shell)中的一般内容;看……即使你的shebang是
!/bin/ksh
,你实际上是如何开始你的脚本的?如果你用
sh-yourscript
,那么它是用POSIX-sh运行的,而不是ksh,不管它的shebang是什么。@CharlesDuffy抱歉#!/bin/ksh……如果你在脚本中加入
echo“ksh-version:$ksh-version”
,它会发出什么?