sh/Bash shell脚本中的#(bang-pound)是什么意思?

Jay*_*lor 14 bash shell command-line scala

我想了解这个Scala脚本的工作原理:

#!/usr/bin/env bash
exec scala "$0" "$@"
!#
object HelloWorld {
    def main(args: Array[String]) {
        println("Hello, world! " + args.toList)
    }   
}
HelloWorld main args
Run Code Online (Sandbox Code Playgroud)

在第3行,什么是"!#"在做什么?然后文件的其余部分被送到Scala程序的标准输入端吗?还有,'!#'记录在哪里?

注意:我能找到的最接近的东西,虽然它没有任何直接相关性,但是Stack Overflow问题为什么你需要在脚本文件的开头加上#!/ bin/bash?(关于Bash脚本的开头).

Blu*_*ict 18

原始文件:

脚本文件可能有一个可选的标题,如果存在则会被忽略.格式化标题有两种方法:以#开头!并以!#结尾,或以::#开头!并以::!#结束.

因此,以下代码只是Scala脚本的标头:

#!/usr/bin/env bash
exec scala "$0" "$@"
!#
Run Code Online (Sandbox Code Playgroud)

  • Scala运行它.`exec`内置导致`scala`解释器*替换*shell,所以bash永远不会看到`!#`行.而`scala`将忽略`#!`和`!#`之间的所有内容. (4认同)