linux shell编程的时候第一行需要指定要使用的shell,请问!是什么意思

clipboard.png
不知道这个感叹号就是表示强调还是说在linux下 有别的特殊意义

阅读 5k
5 个回答

一般在脚本里#代表注释,但是类似#!/bin/bash,#!/usr/bin/env php,#!/usr/bin/env python3这样的不是注释,是指定脚本执行的程序,#!/bin/bash是说该脚本直接使用系统的bash执行,如果不指定,默认也是#!/bin/bash,但是这个只有你的脚本确实是类bash脚本时就会成功。比如后面的#!/usr/bin/env php就是指定执行php脚本的。如果没有这样,一个简单的php脚本test.php就只能用系统能执行的命令 php test.php来执行,但指定后就可以直接执行./test.php脚本。

在linux中,开头顶格写的#!是固定字符,是提供给内核用来识别可执行格式的。
内核中定义了多种可执行程序文件的可执行格式,当执行文件时,内核会根据预定义好的字符判断该程序是何种可执行文件,当内核看到起始的#!后,就判定该文件为脚本程序,从而调用相应的解释器解释执行该文件。

-#!的名字叫Sha-Bang:Sharp for #, Bang for !
作用是告知系统应该用哪个命令解释器执行该脚本

没有!的话shell和Python都会把这一行当做普通注释

表示用什么编译器。这样该文件只要有执行权限就可以按目录执行了例如./test.sh,否则要根据编译器手动选择编译器类型例如bash test.shphp test.php,python test.python

一般的解释是:第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。第一行写错或者不写时,系统会有一个默认的解释器进行解释
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题