【问题标题】:array in loop in bashbash中的循环数组
【发布时间】:2014-04-29 14:12:57
【问题描述】:

我尝试在 bash 中创建一个伪数组

    frame1=(one two three)
    frame2=(one two three)
    frame3=(one two three)
    echo ${frame2[2]}

有效但

for ((fr=1; fr<=$records; fr++)) 
do
frame$fr=(one two three)
done

不起作用。如何在 bash 中制作这样的伪数组?

[编辑] 如果我尝试在内部循环中使用变量它不起作用

for ((fr=0; fr<=$records; fr++))
do
declare -a "frame$fr=(one two three)"
done
for ((fr=0; fr<=$records; fr++))
do
for ((lv=0; lv<=$fields; lv++))
do
#echo ${frame$fr[2]}
echo ${frame6[$lv]}
done
done

上面的工作,但被注释掉的行不起作用

line 16: ${frame$fr[2]}: bad substitution

【问题讨论】:

  • 回复:您的编辑。您必须使用间接扩展。顺便说一句,Bash 不应该像这样使用类似指针。将其留给其他编程语言并检查您的设计。现在,如果您真的想要这样做,name=frame$fr[$lv]; echo "${!name}" 会做到的。
  • 我只是尝试使用 awk 从电子表格中获取字段(图像)并将它们发送到数组,然后发送到 imagemagick。你会叫#!/bin/awk 一种语言吗?我可以从 awk 发送到 imagemagick 吗?否则你会建议什么语言,因为我认为这样我会遇到麻烦,因为我仍然必须在数组中放入真实值。
  • 您可以尝试使用 Perl,因为它对 ImageMagick 有很好的绑定,并且您可以毫无问题地处理数组数组。 Python 也可以。

标签: arrays bash for-loop


【解决方案1】:

使用 declare 内置函数首先将 LHS 评估为名称。

for ((f1=1; f2<=$records; fr++))
do
  declare -a "frame$fr=(one two three)"
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 2012-05-24
    • 2015-10-06
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多