bash - 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 条件以及它是什么意思?
运行时也显示错误:[[:未找到
解决方案
中的条件语法bash
以:
if
命令
the[[
实际上是一个命令(还有[
and ((
)。
$ type [[
[[ is a shell keyword
里面的条件测试[[
比较奇怪:
",$env," != *",$ENV,"*
$env
和分别$ENV
代表变量和的值。右边的意思是“零个或多个任意字符” 。意思是“不等于”,虽然这里它表示“不匹配”。变量周围的引号是为了防止 shell 扩展值中的任何特殊字符(如 *)。逗号只是文字字符。env
ENV
*
!=
这就是为什么程序员不只是说"$env" != "$ENV"
我不确定,而是如果它没有坏就不要修复它。
ENV
sh
是一个特殊变量,用于在使用而不是调用 shell 时确定启动文件的名称bash
。这意味着在这个脚本中它被误用了。
你为什么得到error : [[: not found
?请准确说明您是如何运行此脚本的,因为这意味着您没有使用bash
or sh
。例如,如果你使用csh
(C-shell) 那么你会得到:
% [[
[[: Command not found.
这与您显示的错误消息相似,但不完全相同。
推荐阅读
- javascript - html网站中的倒计时时间刷新
- java - 在不超过给定能量的情况下跑一段距离的最短时间
- c# - 使用 .NET Core 2.1 创建新项目后 IIS 上的事件错误 9009
- reactjs - React:Iframe src 由 react-router 链接,而不是在公共文件夹中打开文件
- google-oauth - 请求 GoogleAdwords API 时出现错误 400 redirect_uri_mismatch
- google-cloud-platform - 扳手中的下一个数字
- javascript - Three.js中平面上的点
- matlab - 在MATLAB中,如何找到所有这些曲线下间隙中最高点的坐标位置?
- visual-studio - 为 VS 2017 中的测试保存默认处理器架构
- java - dex2jar 不是内部或外部命令、可运行程序或批处理文件