首页 > 解决方案 > Bash shell 脚本表达式和条件语法

问题描述

在浏览项目配置文件时,我遇到了我无法理解的 shell 脚本。脚本是这样的——

#list all possible environments
env="local,dev,qa";

# check valid environment.
if [[ ",$env," != *",$ENV,"* ]] ; then
    echo "ENVIRONMENT is $ENV but must be set to local, dev or qa as per the environment.";
    exit 1;
fi

在这里如何评估 if 条件以及它是什么意思?

运行时也显示错误:[[:未找到

标签: bashshellunix

解决方案


中的条件语法bash以:

if 命令

the[[实际上是一个命令(还有[and (()。

$ type [[
[[ is a shell keyword

里面的条件测试[[比较奇怪:

",$env," != *",$ENV,"*

$env和分别$ENV代表变量和的。右边的意思是“零个或多个任意字符” 。意思是“不等于”,虽然这里它表示“不匹配”。变量周围的引号是为了防止 shell 扩展值中的任何特殊字符(如 *)。逗号只是文字字符。envENV*!=

这就是为什么程序员不只是说"$env" != "$ENV"我不确定,而是如果它没有坏就不要修复它。

ENVsh是一个特殊变量,用于在使用而不是调用 shell 时确定启动文件的名称bash。这意味着在这个脚本中它被误用了。

你为什么得到error : [[: not found?请准确说明您是如何运行此脚本的,因为这意味着您没有使用bashor sh。例如,如果你使用csh(C-shell) 那么你会得到:

% [[
[[: Command not found.

这与您显示的错误消息相似,但不完全相同。


推荐阅读