$ 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
还有,为什么结果不正常?

最佳答案

&在后台运行一个程序,它也是一个类似于;的“命令结束”指示器,这就是为什么您的命令被截短的原因。你可以用\来转义,或者用双引号括起来:

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语句都是并行执行的。这就解释了为什么它们最终以随机顺序执行,因为这七个进程将以不确定的顺序完成,这取决于它们从内核获取时间片的时间。

关于bash - 这个bash脚本怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3742741/

10-10 17:38