我不小心用$开始了一个bash脚本!代替 #!并得到一些非常奇怪的行为.我想弄清楚发生了什么.
如果您尝试此脚本:
$!/bin/bash echo Hello world!
你会得到以下行为:
$chmod +x hello $./hello [nothing happens,get prompt back] $exit exit Hello world! $
所以看起来这样的事情发生了:
>产生了一个新的bash shell.
>退出时,执行脚本的其余部分.
这是怎么回事?怎么样都发生了?没有#!,shell如何知道使用bash来解释脚本?
显然这是“满足我的好奇心”,而不是“解决我的问题”问题.谷歌搜索不会产生太多,可能是因为#!和$!在查询中不会让谷歌机器人高兴.
$something是一个参数(“变量”)扩展,但是$!特别是返回一个未在脚本中设置的值,因此它将扩展为零长度字符串.
因此,您的脚本是正确的,相当于:
/bin/bash echo Hello world!
shebang magic number是Unix的一个老功能,但外壳更老了.内核不能执行的执行位设置的文本文件(因为它实际上没有编译)由子shell执行.也就是说,shell故意运行另一个shell并将路径名作为参数传递.这就是在shebang发明之前执行shell脚本编写的命令,它仍然存在于代码中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。