在其它系统,像DOS上面,一个命令的参数顺序可能不重要,但是在FreeBSD中,很多命令都要求参数的顺序,顺序错了,命令可能就会执行出错。

  Man一下tcpdump:

  tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
               [ -C file_size ] [ -F file ]
               [ -i interface ] [ -m module ] [ -M secret ]
               [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -Z user ]
               [ -y datalinktype ]
               [ expression ]
   
  发现选项-w file应该在expression之前。如果把-w file放在后面,则执行就会出错。

  同样还有ssh和scp。

  ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
         [-D port] [-e escape_char] [-F configfile] [-i identity_file] [-L
         port:host:hostport] [-l login_name] [-m mac_spec] [-o option]
         [-p port] [-R port:host:hostport] [-S ctl] [user@]hostname [command]

  如果把-P 等参数放在hostname后面,命令同样执行出错。

  其实,最简单的ls命令也要求顺序。不信就输入个命令:ls -A a* 和ls a* -A 试试,后面命令肯定会报错。

  对系统内部工作机制不是很了解,所以具体是不是一定有顺序,还不敢下断论。

  但是一般的规律,好象应该符合对命令解释的一般规则:“[]”内的不用考虑顺序,“[]”间要考虑顺序。