For While Do Loop bash

时间:2016-01-19 20:22:26

标签: bash loops

我有以下循环将打印出Url.com/1.jpg到xx.jpg(我在{1..2}中选择的任意数字)

我需要为多个URL运行此循环,并且不想为每个URL添加新的for循环。

for i in {1..2}; do 
echo "'http://url.com/$i.jpg',"
echo "'http://url1.com/$i.jpg'"
done

按原样运行时,我

'http://url.com/1.jpg',
'http://url1.com/1.jpg'
'http://url.com/2.jpg',
'http://url1.com/2.jpg'

将文本显示为以下内容的最简单方法是:

'http://url.com/1.jpg',
'http://url.com/2.jpg',
'http://url1.com/1.jpg'
'http://url1.com/2.jpg'

For,Do Do? 嵌套循环?

3 个答案:

答案 0 :(得分:2)

没有(显式)循环! :)

printf "'http://url.com/%d.jpg',\n" {1..2}
printf "'http://url1.com/%d.jpg'\n" {1..2}

或者,通过添加一个循环进一步概括:

urls=(
    "'http://url.com/%d.jpg',"
    "'http://url1.com/%d.jpg'"
)
for url in "${urls[@]}"; do
    printf "$url\n" {1..2}
done

答案 1 :(得分:0)

只需使用两个for循环。

for i in {1..2}; do 
echo "'http://url.com/$i.jpg',"
done
for i in {1..2}; do 
echo "'http://url1.com/$i.jpg'"
done

答案 2 :(得分:0)

在循环结束时将done替换为done | sort。或者将您的网址粘贴在第二个列表中,如本例所示,因为列表通常从左向右展开:

$ echo {a,b}{1..3}
a1 a2 a3 b1 b2 b3

第二种方法的好处是让你在一个命令中执行你的wget或其他命令,比如wget http://{base_url1,base_url2}/image{1..3}.jpg,并且是我至少每周使用的一般结构。