📅  最后修改于: 2023-12-03 15:00:36.463000             🧑  作者: Mango
你是否曾经遇到过这样的问题:你编写了一段脚本,但是你的系统不知道要用哪个解释器来运行它?这时候,环境变量注释(env hashbang)就可以派上用场了。
env hashbang (或者叫 shebang)是一个由井号和惊叹号组成的特殊注释,它位于脚本的第一行。这个注释告诉操作系统这个脚本需要哪个解释器来执行它。
#!/usr/bin/env python3
这个例子中,env hashbang 告诉操作系统使用 python3
来解释这个脚本。注意,在这个例子中,我们使用 env
来寻找 python3
。这是因为不同的系统可能将 python3
安装在不同的位置上。
首先,你需要确定你要使用的解释器的路径。例如,如果你使用 python3
,你可以运行以下命令来查找它的路径:
which python3
这个命令会输出 python3
的路径。例如,在我的机器上,它输出的是 /usr/bin/python3
。
然后,在脚本的第一行,添加 env hashbang:
#!/usr/bin/env python3
这个例子中,env hashbang 告诉操作系统使用 python3
来解释这个脚本。
在一些脚本中,需要借助一些命令行工具来修改文件名、行结尾等等。例如,下面的脚本将会把它所在的文件夹下的所有文件的名字从小写修改为大写:
#!/bin/sh
for file in *
do
mv "$file" "$(echo $file | tr '[:lower:]' '[:upper:]')"
done
这个脚本使用了通配符来循环访问所有的文件。然而,这段代码还存在一个问题,即文件名中包含空格时会出错。要修复这个问题,我们需要将通配符改为 $(find . -type f -name "*.txt")
这样的形式。
因为这个脚本是使用 shell 解释器来运行,我们也可以使用 bash
的更先进的特性。
#!/bin/bash
shopt -s globstar nullglob
for file in **/*.txt
do
mv "$file" "${file,,}"
done
这个脚本添加了 shopt -s globstar nullglob
命令来开启 **
这个特殊的通配符,代表任意深度的文件夹。
env hashbang 是一个十分有用的特性。它让我们在脚本中指定使用哪个解释器来执行这个脚本。在不同的系统上,不同的解释器可能被安装在不同的路径上,使用 env hashbang 可以让我们简单地寻找到正确的路径。除此之外,我们还可以使用它来使用一些先进的 shell 特性。