如何使用for循环在bash中添加数组中的值

时间:2014-10-19 14:42:37

标签: arrays bash nested-loops imagemagick-convert

我的目标是为我自己转换(Imagemagick)中的注释功能。在包含一些图像的文件夹中运行脚本:我尝试读取带有注释标题的文本文件,每个文本文件都在一个新行上。 然后将文件读入数组。 (也许有更好的方法?)

我无法理解如何添加数组的每个值并循环遍历文件夹中的所有图像。

到目前为止,这是脚本:

#!/usr/bin/bash

## content of file.txt
sample 1
sample 2
sample 3
sample 4
sample 5
sample 6
sample 7
sample 8
sample 9

## Read from a file into an array, print the array
array=()

# Read the file in parameter and fill the array named "array"
getArray() {
    i=0
    while read line # Read a line
    do
    array[i]=$line # Put it into the array
    i=$(($i + 1))
    done < $1
}

getArray "file.txt"

## Here my problems start

for f in *.jpg; do fn=${f%.*};

    for e in "${array[@]}";do

    convert ${fn}.jpg -fill white -gravity South -pointsize 32 -annotate +0+5 "$e" ${fn}_annotated.jpg ;done

done

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

# Store the whole file in an array
readarray array < "file.txt" || exit 1

i=0
for f in *.jpg ; do
    fn=${f%.*}
    title=${array[i++]}   # in array[] bash performs arithmetic expansion

    convert "$fn.jpg" -fill white -gravity South -pointsize 32 \
        -annotate +0+5 "$title" "${fn}_annotated.jpg"
done