最近在学习shell编程,对于shell脚本中第一行用于指定脚本解释器的代码到底有没有起到指定解释器的作用感到疑惑,如:#!/bin/bash
在网上查找了不少资料,发现网上竟然也分了两大派,一些人认为#!/bin/bash没有起到作用,因为在shell脚本中#表示是注释的意思,而另一些人则认为是起作用的,但是没有给出令人信服的理由,没办法,我只好自己动手做测试了。
1.首先我先创建了一个名为test.sh的shell文件,里面内容如下
![cac512db873be10ae8c9faf69adb9ab5.png](https://i-blog.csdnimg.cn/blog_migrate/f0d58f32a89f8d8b8d6a819541c381c4.png)
这个脚本文件中的第二行代码使用了bash语法,不支持POSIX规范,所以如果这个文件是以bash解释器运行的话,是可以正常运行,而如果换为sh解释器的话,便会报语法错误
修改test.sh权限
![e29420a361443837ea9f6fff97f5cf80.png](https://i-blog.csdnimg.cn/blog_migrate/63cdbf3c19531e9a11bedda6200370e6.png)
然后直接执行test.sh
![765562f332ed374413364ec2cb5f6558.png](https://i-blog.csdnimg.cn/blog_migrate/e7c4a0ae6062cf96d1fe9c4834cbeb0b.png)
可以看到,脚本成功运行,没有报错,然后我将第一行修改为#!/bin/sh
![c156b0ed5bcab07e94f8d81cf230e606.png](https://i-blog.csdnimg.cn/blog_migrate/1fcc37ea0d8828e8c1c1e34fffcd8a25.png)
2.然后运行
![78ed0a33f4fcc10ba41fbfc97520addf.png](https://i-blog.csdnimg.cn/blog_migrate/5d5aa47966f20455499500606437a90c.png)
这个时候便报了一个语法错误
由此可以得出结论,shell脚本的第一行指定脚本解释器是确实起作用的,不过值得注意的是,当我们使用指定解释器运行脚本的时候,我们脚本文件中的第一行会失效,比如通过bash+文件名运行脚本的方式,这样即便我在文件中指定是sh解释器,结果依然会以bash解释器运行的。
(本文由源码时代技术老师原创撰写,转载请注明出处)