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

问题:

我试图编写一个使用 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 must
    be a literal `]', to match the opening `['.

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

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

txt 复制代码
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  Unary
    expressions are often used to examine the status of a file.  There
    are string operators and numeric comparison operators as well.

    The behavior of test depends on the number of arguments.  Read the
    bash 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

相关阅读:

相关推荐
高磊20058 小时前
LVS(Linux virual server)
linux·服务器·lvs
LedgerNinja8 小时前
WEEX API 自动化交易实践:下单、撤单、订单查询与状态闭环
运维·自动化
shwill1238 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
执笔画流年呀9 小时前
Linux搭建Java项目部署环境
java·linux·运维
Dory_Youth10 小时前
联想笔记本电脑失灵
运维·笔记·电脑
Sisphusssss10 小时前
香橙派5plus GPIO
linux·python·ubuntu
W.W.H.10 小时前
嵌入式 Linux外接USB/WIFI模块兼容5G频段实战
linux·运维·5g·wifi
运维大师10 小时前
【K8S 运维实战】24-资源优化HPA与VPA
运维·kubernetes·github
影视飓风TIM10 小时前
Linux下C程序编译:gcc 动态链接与静态链接全解
linux·c语言
GlobalHRTalk10 小时前
埃及名义雇主EOR业务概述与市场发展优势分析
大数据·运维·人工智能