Bash Shell脚本表达式和条件语法

时间:2018-12-07 09:08:16

标签: bash shell unix

在浏览项目配置文件时,我遇到了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条件的,它是什么意思?

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

1 个答案:

答案 0 :(得分:2)

bash中的

条件语法开头为:

if 命令

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

$ type [[
[[ is a shell keyword

[[内部的条件测试很奇怪:

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

$env$ENV分别代表变量envENV。右侧的*表示“零个或多个字符”。 !=表示“不等于”,尽管此处表示“不匹配”。 变量周围的引号用于防止值中的任何特殊字符(例如*)被shell扩展。逗号只是文字字符。

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

ENV是一个特殊变量,用于在使用sh而不是bash调用shell时确定启动文件的名称。含义是在此脚本中它被滥用。

您为什么得到error : [[: not found?请确切显示您如何运行此脚本,因为这意味着您没有使用bashsh。例如,如果您使用csh(C壳),则会得到:

% [[
[[: Command not found.

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