从这个链接:http://scala.epfl.ch/documentation/getting-started.html
#!/bin/sh
exec scala "$0" "$@"
!#
object HelloWorld extends App {
println("Hello, world!")
}
HelloWorld.main(args)
Run Code Online (Sandbox Code Playgroud)
我知道这$0是针对脚本名称,并且$@对于传递给执行的所有参数,但是!#意味着什么(谷歌bash "!#" symbols似乎没有显示结果)?
这是否意味着退出脚本并且stdin来自剩余的行?
这是scala本身的一部分,而不是bash.注意发生了什么:exec命令替换进程scala,然后读取给定的文件"$0",即bash脚本文件本身.Scala忽略了#!和之间的部分,并将!#其余部分解释为scala程序.他们选择"反向shebang"作为shebang的合适对手.
要了解exec更换流程的含义,请尝试以下简单脚本:
#!/bin/sh
exec ls
echo hello
Run Code Online (Sandbox Code Playgroud)
它不会打印"你好",因为该过程将被替换ls的过程,当exec被执行.
参考:http://www.scala-lang.org/files/archive/nightly/docs-2.10.2/manual/html/scala.html