Shebang行的写入
将以下内容写入文件semester,每次写入一行
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
1 Shebang 行 (#!/bin/sh
)
Shebang 行 (#!/bin/sh
)是 UNIX/Linux 系统中脚本的标准开头(称为 “shebang” 或 “hashbang”),作用是指定脚本的解释器。
#!
是固定前缀/bin/sh
是系统默认 Shell 的路径
2 问题
使用echo #!/bin/sh > semester
写入Shebang行失败,因为#
被Bash解析为注释符号。
3 解决方案
使用单引号包裹内容:
echo '#!/bin/sh' > semester # ✅ 正确写法
避免无引号或双引号:
echo #!/bin/sh > semester # ❌ 注释导致写入失败
echo "#!/bin/sh" > semester # ❗ 双引号在启用历史扩展时可能报错
!
后接字符串可能被解析为历史命令引用(如!123
表示执行历史记录第123条命令)
而使用单引号'
包裹,能禁用其解析
4 #
触发注释的条件
- 出现在单词的起始位置(即前面是空格或命令分隔符)且未被引号包裹(单引号
'
或双引号"
) - 后面紧跟
!
,即#!
不在脚本第一行作为Shebang生效时
5 单引号'
与双引号"
的区别
5.1 单引号 '
的行为
完全字面量,完全禁用所有特殊字符的解析:
- 字符串中的
*
、$
、!
等符号都会被当作普通字符。 - 变量不会被扩展。
5.2 双引号 "
的行为
允许部分特殊字符的解析:
- 变量(如
$VAR
)会被扩展。 - 命令替换(如
$(cmd)
或`cmd`
)会被执行。 - 部分转义:
$
、反斜杠转义字符\
(如\n
、\t
)等会被解析;但*
不会被解析