Shell - 命令解释器shabang(#!)

本文介绍了Sha-Bang(#!)的概念及其在脚本中的作用。详细解释了为什么它不被视为注释,其正确用法和规范,并说明了为什么推荐使用#!/bin/env perl这样的写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. #!的名字为什么叫Sha-Bang?

Sha-Bang是Sharp和Bang的组合词。Sharp for #, Bang for ! 类似的情况是,C#通常被称为C Sharp.

2. Sha-Bang(#!)是不是注释?

不是注释。Sha-Bang(#!)所在行的作用是告知该脚本使用的是哪种命令解释器,并不是可有可无的。

虽然很多情况下省略了Sha-Bang(#!)仍然能够运行脚本,这是由于系统在这种情况下是默认使用了当前命令行解释器的.

“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。

3. Sha-Bang(#!)的编写有什么规范?

Sha-Bang(#!)应该位于脚本的第一行,并且顶格填写,否则都是错的,前面不能有任何命令和注释。

若Sha-Bang之前的内容都是注释,也是错误的,且这种错误很常见,不易发现。

因为此时Sha-Bang(#!)所在行实际上是不起效的,系统使用了默认的命令行解释器。

4. Sha-Bang(#!)在同一个脚本中可以出现几次?

只有第一行的Sha-Bang(#!)会生效,其余的会视为注释

5. 为什么推荐这种写法:#!/bin/env perl?

因为这是有利于移植脚本到其它平台的写法,解释器的默认安装路径在各个操作系统是不太一样的。有的是/bin/,有的是/usr/bin/,甚至有可能是用户自定义的路径,使用env就基本上能够通用了。虽然env也有可能在/bin/或者/usr/bin/中,但通常的情况是在这两个路径下都有env,或者其中一个是另一个的符号链接。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值