将数组的值分配给变量的shell脚本



我想将filearray中的值分配给变量$filename0、$filename1…etc

如何设置自动递增的文件名并分配正确的值结果应该是这样的$filename0=filearray[0]$filename1=filearray[1]

现在,这是我的代码

filearray=('tmp1.txt' 'tmp2.txt' 'tmp3.txt' 'tmp4.txt' 'tmp5.txt')
let i=0
while (( i <= 4 ));
do
filename=${filearray[i]}
i=$(( i+1 ))
done

很抱歉更新延迟:
现在,当文件名中有扩展名时,它会提示
"语法错误:无效算术运算符(错误标记为".txt"(">
,但当我回显$(filename1(时可以

count=0
for i in ${filearray[@]};
do
count=$(( count +1 ))
declare filename$count=$i
done
y=0
while [ $y < $count ]
do
y=$(( y + 1 ))
echo $((filename$y))
done

您似乎想要动态创建变量名。虽然这是可能的,但几乎总是有更好的方法来做到这一点,例如使用关联数组:

filearray=('tmp1.txt' 'tmp2.txt' 'tmp3.txt' 'tmp4.txt' 'tmp5.txt')
declare -A fileassoc
for ((i=0; i < ${#filearray[@]}; i++))
do
fileassoc["filename$i"]=${filearray[i]}
done
# To illustrate:
for key in "${!fileassoc[@]}"
do
echo "$key: ${fileassoc[$key]}"
done
# or
for ((i=0; i < ${#filearray[@]}; i++))
do
key="filename$i"
echo "$key: ${fileassoc[$key]}"
done

提供:

filename4: tmp5.txt
filename1: tmp2.txt
filename0: tmp1.txt
filename3: tmp4.txt
filename2: tmp3.txt

(关联数组没有排序,它们不必是(

*使用一个名为eval的危险命令-那里有龙,不要去那里,即使有魔法戒指

最新更新