为什么Bash中的“[“和“]“周围应该有空格

devtools/2024/9/22 8:34:54/

问题:

我试图编写一个使用 if 语句的 Bash 脚本。

bash">if[$CHOICE -eq 1];

脚本一直在报错,直到我在 [ 前后并在 ] 之前加了一个空格,如下所示:

bash">if [ $CHOICE -eq 1 ];

我的问题是,为什么在 Bash 中方括号周围的空格如此重要?


回答:

在 Bash 环境下,使用命令 help [ 查看方括号的帮助信息:

bash">root@linux:~# help [
[: [ arg... ]Evaluate conditional expression.This is a synonym for the "test" builtin, but the last argument mustbe a literal `]', to match the opening `['.

是用于对表达式求值的。它是内置命令 test 的同义词,使用时其最后一个参数必须是字面量 ],以匹配开头的 [

然而,尽管它们做了完全相同的事情,test 却有一个更详细的帮助页面。使用命令 help test 以查询更多信息。

test: test [expr]Evaluate conditional expression.Exits with a status of 0 (true) or 1 (false) depending onthe evaluation of EXPR.  Expressions may be unary or binary.  Unaryexpressions are often used to examine the status of a file.  Thereare string operators and numeric comparison operators as well.The behavior of test depends on the number of arguments.  Read thebash manual page for the complete specification.

根据对 expr 的求值,以0 (true)1 (false)的状态退出。表达式可以是一元或二元的。

一元表达式通常用于检查文件的状态。还有字符串运算符和数字比较运算符。

test 的行为取决于参数的数量。请阅读 bash 手册页 以获取完整的规范。

此外,请注意,我故意使用 help test 而不是 man test。这是因为 test[ 是 shell 的内置命令。它们的功能集可能与手册页中描述的 coreutils 的 /bin/test/bin/[ 命令不同。


参考:

  • stackoverflow question 9581064

相关阅读:

  • 为什么在可执行文件或脚本名称之前需要./(点-斜杠)
  • sh和Bash的区别
  • 2>&1是什么意思
  • 如何使用bash脚本并行运行多个程序
  • 为什么要使用xargs命令
  • 一文掌握全网最全文件操作命令!120+命令

http://www.ppmy.cn/devtools/32712.html

相关文章

Scala 补充 正则、异常处理...

Scala 补充 正则、异常处理、类型信息处理 基于前几篇文章 (Scala介绍与环境搭建、Scala 第一篇 基础篇、Scala 第二篇 算子篇、Scala 第三篇 OOP篇) 补充 一、正则 1、匹配2、替换3、分割4、分组5、练习 二、异常处理三、类 型信息处理 一、正则 1、匹配 简单匹配 // 判断…

Colab - Introduction to Object Detection using TensorFlow Hub

Colab - Introduction to Object Detection using TensorFlow Hub 1. 源由2. TensorFlow Hub3. 目标检测3.1 举例 - EfficientDet/D4 COCO 20173.2 下载示例图像3.2.1 显示部分样本3.2.2 定义一个将类别ID映射到类别名称和颜色的字典 3.3 加载模型3.4 单张照片执行推理3.4.1 推…

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中,向量无处不在,我想很多人都使用过向量类的内置方法 normalized() 吧,我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘,以达到角色朝任一方向移动时速度都相等的效果,但内部具体是如何将该向量进…

设计模式之数据访问对象模式

在Java编程的浩瀚星海中,有一个模式低调却强大,它像是一位默默无闻的超级英雄,支撑起无数应用的数据脊梁——那就是数据访问对象(DAO, Data Access Object)模式!想象一下,如果你能像操纵魔法一样…

Vue 组件间的数据绑定

在Vue组件中,v-model指令可以用来实现双向数据绑定。它用于将组件的属性和父组件中的数据进行双向绑定,使得当属性的值改变时,父组件中的数据也会相应地改变,并且当父组件中的数据改变时,属性的值也会相应地改变。 目…

第III章-ⅠVue3进阶语法

vue3进阶语法 setup 函数Vue方法计算属性及监听器methods方法 computed计算属性ref函数 watch 监听器Vue的表单绑定v-model实现表单绑定v-model修饰符 setup 函数 Vue 3 引入了组合式 API,其中核心是 setup 函数。这个函数是组件中所有 Composition API 特性的入口…

MySQL8.0版本在CentOS系统安装(2024最新版)

一:MySQL8.0版本在CentOS系统安装 安装 使用yum安装MySQL rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpmrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023yum install mysql-server安装完成后,启动MySQL并配…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django:核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章:Django简介 背景和发展历程: Djan…