生生不息

生生不息

运行shell脚本时报错"[[ : not found"解决方法

2024-12-30
运行shell脚本时报错"[[ : not found"解决方法

背景

装rust探针时,遇到的sh脚本执行错误

脚本为:

# get_architecture
arch=$(uname -m)
# 设置 ARCHITECTURE 变量
if [[ $arch == "aarch64" ]]; then
    ARCHITECTURE="aarch64"
elif [[ $arch == "x86_64" ]]; then
    ARCHITECTURE="x86_64"
else
    ARCHITECTURE="unknown"
fi

github_project="zdz/ServerStatus-Rust"
tag=$(curl -m 10 -sL "https://api.github.com/repos/$github_project/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
echo ${tag}

正常会输出版本号。

大多服务器是可以的,忘记是哪个机器和系统了。

运行报错运行shell脚本时报错 [[ : not found

解决方法

sh脚本功能就是判断两个字符串是否有包含关系,但是在运行至判断表达式时报错,sh命令无法识别"[[]]"表达式。

原因:bash与sh是有区别的,两者是不同的命令,且bash是sh的增强版,而"[[]]"是bash脚本中的命令,因此在执行时,使用sh命令会报错,将sh替换为bash命令即可:

将脚本保存为 tag.sh

然后执行
bash tag.sh
就可以成功了。