第一次编写bash脚本。我只是通过stackoverflow问题找到了一些代理示例。
问题:如何组合声明为imagetable
的声明{s =}}和调整大小脚本,以便它根据键值循环操作。
关联数组:
declare -A imagetable
imagetable=(
["custom-insights-laptop_1x.png"] 937x508
["custom-insights-laptop_2x.png"] 1874x1015
)
调整脚本大小
#!/bin/bash
#replace this -name value from imagetable
RETINA_IMAGES=`find . -name "custom-insights-laptop_1x.png"`
for retina_path in $RETINA_IMAGES
do
target_path="${retina_path%.png}.png"
#replace the -resize value from imagetable.
convert -resize 937x508 $retina_path $target_path
echo "Converted ${retina_path} to ${target_path}"
done
答案 0 :(得分:2)
我想我理解你的需要,但我不明白你的RETINA_IMAGES=$(find .. )
这对你有帮助。
declare -A imagetable
imagetable=(
[custom-insights-laptop_1x.png]=937x508
[custom-insights-laptop_2x.png]=1874x1015
)
for i in ${!imagetable[*]} ; do
echo "#dbg: i = $i and \${imagetable[$i]}=${imagetable[$i]}"
sz=${imagetable[$i]}
convert -resize "${sz}" "$retina_path" "$target_path"
done
通过dbl引用变量的使用避免了整类shell脚本错误,就像我在转换行上所做的那样。
如果您需要进一步的帮助,请发表评论。
只需执行
即可学习很多关于关联数组的知识echo ${!arr[*]}
echo ${arr[*]}
echo ${#arr[*]}
echo ${arr[key]}
修改
所以更进一步,没有必要将文件名保存为RETINA_IMAGES(谢谢@MarkSetchell,我现在得到它; - )
尝试类似
的内容fileTarget="custom-insights-laptop_1x.png"
find . -name "$fileTarget" \
| while read retina_path ; do
target_path="${retina_path%.png}.png"
#replace the -resize value from imagetable.
convert -resize ${imagetable[$fileTarget]} $retina_path $target_path
echo "Converted ${retina_path} to ${target_path}"
done
然后,您可以设置所有$ {!imagetable [*]}值的for循环,设置$fileTarget
。
IHTH
答案 1 :(得分:0)
我认为您只需要一些代码帮助,这看起来最简单,而且您不需要关联数组:
imgfile[0]="fileA.png"
imgfile[1]="fileB.png"
imgfile[2]="fileC.png"
for f in ${imgfile[@]}
do
IMGSET=$(find . -name "$f")
#other iterative code here
done