这个bash脚本有什么问题?

时间:2010-09-18 17:38:26

标签: bash scripting

$ cat fav
#!/bin/bash
for i in {1..7}
do
    echo http://api.stackoverflow.com/1.0/users/113124/favorites?page=$i&pagesize=100 
done
$ ./fav
http://api.stackoverflow.com/1.0/users/113124/favorites?page=1
http://api.stackoverflow.com/1.0/users/113124/favorites?page=3
http://api.stackoverflow.com/1.0/users/113124/favorites?page=6
http://api.stackoverflow.com/1.0/users/113124/favorites?page=5
http://api.stackoverflow.com/1.0/users/113124/favorites?page=7
http://api.stackoverflow.com/1.0/users/113124/favorites?page=4
http://api.stackoverflow.com/1.0/users/113124/favorites?page=2
$
  • 为什么我最后没有得到&pagesize=100
  • 另外,为什么结果不按顺序?

3 个答案:

答案 0 :(得分:4)

&在后​​台运行一个程序,它也是一个“命令结束”指示符,就像;一样,这就是你的命令被缩短的原因。您可以使用\将其转义或将整个内容放在双引号中:

echo http://api.stackoverflow.com/1.0/users/113124/favorites?page=$i\&pagesize=100
echo "http://api.stackoverflow.com/1.0/users/113124/favorites?page=$i&pagesize=100"

有趣的是,pagesize=100也作为单独的命令执行,但这实际上是一个有效的变量赋值。因此,它没有生成错误消息,这可能会让您了解正在发生的事情。

背景意味着所有的echo语句都是并行执行的。这就解释了为什么他们最终以随机顺序执行,因为七个进程将根据他们从内核获取时间片的不确定顺序完成。

答案 1 :(得分:1)

将echo参数括在引号中:

echo "http://api.stackoverflow.com/1.0/users/113124/favorites?page=$i&pagesize=100"

&是一个shell元字符,用于在后台运行命令。将参数括在"使&失去其特殊含义。

答案 2 :(得分:1)

& letter是shell的关键字。它代表背景。在你的http字符串周围使用“”来使你的skript行为正确。

关于shell手册中的背景知识,这是关键功能。