代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

这个bash脚本有什么问题?

  •  2
  • Aakash Goel  · 技术社区  · 15 年前
    $ 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 回复  |  直到 15 年前
        1
  •  4
  •   John Kugelman Michael Hodel    15 年前

    & 在后台运行程序,它也是一个“命令结束”指示器,就像 ; ,这就是你的命令被打断的原因。你可以用它逃走 \ 或者把整件事用双引号括起来:

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

        2
  •  1
  •   codaddict    15 年前

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

    & 是在后台运行命令的shell元字符。把论点括在 " 制作 &

        3
  •  1
  •   ypnos    15 年前

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

    请阅读shell手册中的背景知识,它是关键功能。

    推荐文章