首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

默认测试表达式在zsh和bash中的行为不同-为什么?

默认测试表达式在zsh和bash中的行为不同的原因是因为zsh和bash是两种不同的Shell解释器,它们在处理测试表达式时采用了不同的实现方式和语法规则。

在bash中,默认的测试表达式是使用方括号([])来表示的,例如:

代码语言:txt
复制
if [ $var -eq 0 ]; then
    echo "var equals 0"
fi

而在zsh中,默认的测试表达式是使用双括号(((...)))来表示的,例如:

代码语言:txt
复制
if (( var == 0 )); then
    echo "var equals 0"
fi

这两种不同的语法规则导致了它们在处理测试表达式时的行为不同。具体来说,以下是它们的差异:

  1. 数值比较:
    • 在bash中,使用"-eq"表示等于,"-ne"表示不等于,"-lt"表示小于,"-gt"表示大于等等。
    • 在zsh中,使用"=="表示等于,"!="表示不等于,"<"表示小于,">"表示大于等等。
  • 字符串比较:
    • 在bash中,使用"="表示等于,"!="表示不等于,"<"表示小于,">"表示大于等等。
    • 在zsh中,使用"="表示等于,"!="表示不等于,"<"表示小于,">"表示大于等等。
  • 文件测试:
    • 在bash中,使用"-e"表示文件存在,"-f"表示普通文件,"-d"表示目录等等。
    • 在zsh中,使用"-e"表示文件存在,"-f"表示普通文件,"-d"表示目录等等。

总之,由于zsh和bash是两种不同的Shell解释器,它们在处理测试表达式时采用了不同的语法规则和关键字,因此导致了默认测试表达式在zsh和bash中的行为不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ Java 默认虚拟行为有何不同及其异常处理比较

默认虚拟行为有何不同 方法默认虚拟行为 C++ Java 是相反 C++ ,类成员方法默认是非虚拟。...** 二、C++ Java 异常处理比较 两种语言都使用try、catchthrow关键字进行异常处理,并且try、catchfree块含义两种语言中也相同。...以下是 Java C++ 异常处理之间差异。 1) C++ ,所有类型(包括原始类型指针)都可以作为异常抛出。... Java ,有两种类型异常 - 已检查未检查。 5) Java,新关键字throws用于列出函数可以抛出异常。...因此 Java 查找处理异常比 C++ 语言中更容易。 如果你发现任何不正确内容,或者你想分享有关上述主题更多信息,请发表评论。

92320

如何在 Linux 运行一个 Shell 脚本

考虑到 bash默认 shell,你可以像这样运行一个脚本: bash hello.sh 你知道这种方法优点吗?你脚本不需要执行权限。对于简单任务非常方便快速。...为什么当你同一个目录下,却不能使用脚本名称?这是因为你 Linux 系统会在 PATH 环境变量中指定几个目录查找可执行文件来运行。...看看,大多数 shell 语法是大多数种类 shell 通用,但是有一些语法可能会有所不同。 例如, bash zsh 数组行为不同。... zsh ,数组索引是从 1 开始,而不是从 0 开始。 Bash Vs Zsh 使用 #!...如果你使用 zsh 特殊语法,你可以通过脚本第一行添加 #! /bin/zsh 方式来标识其是 zsh 脚本。  #!  /bin/bash 之间空格是没有影响。你也可以使用 #!

3.5K20
  • 一文入门Shell编程

    常见 Unix/Linux Shell 包括: Bash(Bourne Again SHell): Bash 是 Linux 许多其他 Unix-like 系统默认 Shell。...# 这是一条注释 变量: Shell 变量无需声明,直接赋值使用。 name="John" echo $name 字符串: 单引号双引号用于定义字符串,有不同行为。...调试脚本unsetunset set -x: 脚本添加 set -x 可以启用调试模式,显示每个命令执行详细信息。 #!...正则表达式: Shell 支持正则表达式,用于字符串匹配处理。 文件权限用户管理: Shell 脚本可以用来管理文件权限用户账户。 异常处理: 使用 trap 命令来捕获处理脚本异常。...进一步学习 一旦掌握了基础知识,可以深入学习 Shell 编程高级主题,例如: 正则表达式: 正则表达式文本处理匹配中非常有用。

    14910

    Linux常用命令09 - sed

    处理文本文件时,通常需要在一个或多个文件查找替换文本字符串。 sed 是一个流编辑器。 它可以对文件输入流(如管道)执行基本文本操作。...使用 sed,您可以搜索、查找替换、插入删除单词行。 它支持基本扩展正则表达式,允许您匹配复杂模式。 接下来, 我将使用 sed 查找替换字符串。...Macos 使用是 BSD 版本,而且大多数 Linux 发行版默认都预装了 GNU。 下面默认是 GNU 版本。...正如您可能已经注意到,在前面的示例,foobar 字符串子字符串 foo 也被替换了。 如果这不是想要行为,请在搜索字符串两端使用单词边界表达式(\b)。 这将确保部分词不匹配。...例如,用/usr/bin/zsh 替换/bin/bash sed -i '' 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt 更简单更易读选项是使用另一个分隔符字符

    2.1K30

    Linux之shell编程基础

    为什么要学习使用shell? Shell属于内置脚本 程序开发效率非常高,依赖于功能强大命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较轻松,简单易学 常见shell种类?...linux中有很多类型shell,不同shell具备不同功能,shell还决定了脚本函数语法,Linux默认shell是/bin/bash(重点),流行shell有ash、bash、ksh...、csh、zsh等,不同shell都有自己特点以及用途。...,运算符其他编程脚本语言一样,常见有算数运算符、关系运算符、 逻辑运算符、字符串运算符、文件测试运算符等 3.1、算数运算符 下表列出了常用算术运算符,假定变量 a 为 10,变量 b 为 20...原生bash不支持简单数学运算,但是可以通过其他命令来实现,例如 awk expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式求值操作。

    3.3K20

    Shell傻傻分不清楚TOP3

    UNIX或Linux系统,Shell即是用户交互界面,也是控制系统脚本语言。当然现在用户也可以选择图形化界面做一些操作系统交互。层次示意图如下: ?...一般发行版Linux系统默认shell程序就是bash。我们写shell脚本时,通常也会在脚本文件头部指定bash作为脚本解释器。 ? 这里多说一句,zsh有时也作为猿媛们默认shell。...zsh语法大多是bash匹配,也不会影响shell脚本执行(因为脚本头部指定bash就还是bash:),也不会影响像小姐姐这样渣渣使用。用它是因为它有神奇开源框架 Oh My God.....基本语法 Shell程序,当指定条件为真时,整个条件测试返回值为 0;反之,如果指定条件为假时,整个条件测试返回值为 非0。...条件测试表达式书写有test expression [ expression ]两种形式,注意后者空格一定不能省!! 脚本中经常出现有字符串测试、整数测试、文件测试、逻辑操作符测试

    72730

    kubectl 高效使用技巧

    理论上,合适 shell(BashZsh)中提供此命令输出将会启用 kubectl 命令补全功能。... Bash Zsh 之间存在一些细微差别(包括 Linux macOS 之间也存在差别)。...Mac 使用 macOS 时,会有些复杂,因为默认 Bash 版本是3.2,而 kubectl 补全脚本至少需要 Bash 4.1,苹果依旧 macOS 上默认使用过时 Bash 版本是因为更新版本...默认 kubeconfig 文件是 ~/.kube/config,使用多个集群时, kubeconfig 文件配置了多个集群连接参数,所以我们需要一种方法来告诉 kubectl 要将其连接到哪个集群...bash/zsh/fish 自动补全脚本,由于经常需要切换不同集群,很可能会误操作集群,这个时候有个提示就很棒了,我们可以使用 kube-ps1 工具来修改 PS1。

    1.4K20

    个性化终端 | zsh bash oh-my-zsh

    一直搞不清楚各类终端区别,最近看到一张图描述不错。 ? 自己装虚拟机发现为什么自己虚拟机默认sh这么丑,而且自动补全不好用,今天才发现原来看到很好看终端默认sh是zsh,而非bash。...对于如今绝大部分GNU/Linux(Debian系除外)Mac OS X用户来说,系统默认/bin/sh指向bash: $ file /bin/sh/bin/sh: symbolic link...to `bash' 不妨试试用zsh来取代bash作为系统/bin/sh: # ln -sf /bin/zsh /bin/sh 安装步骤 下面就来讲讲配置过程,以及个性化方法: 第一步,安装zsh并修改为默认...更多主题可以查阅官网:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes 参考文献 MAC下面有什么好用终端工具?...:https://www.zhihu.com/question/21865155 Ubuntu终端美化:https://www.jianshu.com/p/a0884732c8c1 ZshBash究竟有何不同

    1.4K10

    Docker 镜像安装配置 zsh

    笔者习惯 Mac 或者服务器上使用非 root sudo 用户 zsh,因此也希望在用于开发环境 Docker 镜像也有这样特点。   ...Docker 镜像默认提供一般都是 root 用户,而所有人想要把应用 Docker 化, Docker 镜像中用于运行程序一般不能是 root 用户。...因此,大部分开发者都应该养成使用非 root sudo 用户习惯,既享有 sudo 权限,也要严格控制 Docker 镜像权限。   为什么要使用 zsh 而不使用默认 bash?...当然,zsh 所支持主题、插件也比较丰富,可以适应不同审美使用需求。...ubuntu 用户默认 shell 是 zsh   因此,所对应 Docker 镜像生成配置文件(Dockerfile)如下所示。

    1.7K20

    Linux基础命令行使用技巧

    5.0.2 (x86_64-redhat-linux-gnu) 两者之间对比: bash : 除了sh就是它是最常用shell,使用广泛多数发行版系统默认bash zsh: 用户交互功能比bash...#bash 空行 # zsh 对 “词” 界定跟 bash 有所不同 ~$ echo $WORDCHARS *?...#$%ˆ(){} #(2)命令行默认分词符号设置 :~$ WORDCHARS= #将zsh判定词行为bash一致 #(3) 按 “词” 移动删除操作例子: $ grep 'figlet...默认4):屏幕更新延迟 -C[颜色]:将此颜色用于矩阵(默认为绿色) WeiyiGeek. shopt 命令 描述:用于显示设置shell行为选项,通过这些选项以增强shell易用性。...bash每个命令后检查窗口大小,如果有必要,就更新LINESCOLUMNS值 cmdhist on #bash试图将一个多行命令所有行保存在同一个历史项.这是的多行命令重新编辑更方便

    6K20

    Mac 高效工作指南

    ,但是对于将Mac作为工作电脑而且需要频繁使用功能键(F1-F12)的人,最好将功能键(F1-F12)行为设置为标准功能键。...开发环境配置 命令行终端Terminal 在用户界面没有发明前,终端Terminal曾经是计算机唯一交互方式,就算到了今天,很多服务器仍然只提供终端登陆来操作,作为开发测试运维相关人员,日常工作合理使用终端将大大提高工作效率...替换系统默认Shell Bash作为大多数系统默认安装Shell,大家都多少有所接触,ZshBash类似都是一个Shell,但是Zsh更注重用户体验与人交互,OS X默认也安装好了Zsh,然而你想自己从头开始配置一个顺手...,直观效果如下图所示,代码开源github。 ? Mac OS X默认已经安装好了Zsh,你可以打开终端,输入zsh –version来确认是否安装成功。...Homebrew Cask就是这样一款终端下程序管理器,它扩展了Homebrew,作为Mac App Store有益补充,方便你快速维护日常软件安装升级卸载,复制如下命令终端下运行,按回车后等待安装成功

    2K100

    linux shell:提取正则表达式捕获组(catch group)匹配字符串

    ]] && echo match matched 其实基于上面的表达式不仅可以判断是否匹配正则表达,还可以通过上面表达式创建变量 BASH_REGEX(数组)提取捕获组(catch group),...如下提取一个urlprotocolhost部分 $ [[ "http://www.baidu.com" =~ (https?)...[0]} 即正则表达式捕获组0(全部字符串) {BASH_REMATCH[1]} 即正则表达式捕获组1,以此类推 BASH_REGEX 是 bash定义保存正则表达式捕获组变量,不同脚本解释有不同定义...,比如zsh,ksh就有另外变量定义方式 ksh 保存正则表达匹配数据数组变量名叫 .sh.match ,对BASH_REMATCH,引用时必须以${.sh.match}方式引用 {.sh.match...[0]} 即正则表达式捕获组0(全部字符串) {.sh.match[1]} 即正则表达式捕获组1,以此类推 zsh MATCH 保存匹配整个字符串,对应就是bashBASH_REMATCH[

    4.6K10

    如何揭开Linux命名空间容器神秘面纱【Containers】

    在车库中有一种特定含义,而在Web开发则有不同含义。 我们并不总是随意对话阐明命名空间,因为我们是人类,我们大脑可以快速适应环境,但是对于计算机,必须明确声明该命名空间。...默认情况下,不同命名空间中PID无法相互交互,因为它们不同上下文或命名空间中运行。这就是为什么一个命名空间下“容器”运行进程无法访问其容器外部信息或在另一个容器内部运行信息原因。...在此示例,我将使用Z shell(Zsh),因为我正在计算机上运行Bash shell。如果您在计算机上运行Zsh,请使用Bash或tcsh或其他当前未运行Shell。...为测试命令创建新命名空间: $ sudo unshare --fork --pid --mount-proc zsh % 由于Zsh是交互式外壳程序,因此启动时可以方便地将您带入其命名空间。...了解命名空间存在于主机环境更广泛名称空间上下文中(本演示,这是您计算机,但在现实世界,主机通常是服务器或混合云)可以帮助您了解容器化应用程序行为方式原因他们方式。

    1.1K00

    如何揭开Linux命名空间容器神秘面纱

    在车库中有一种特定含义,而在Web开发则有不同含义。 我们并不总是随意对话阐明命名空间,因为我们是人类,我们大脑可以快速适应环境,但是对于计算机,必须明确声明该命名空间。...默认情况下,不同名称空间中PID无法相互交互,因为它们不同上下文或名称空间中运行。这就是为什么一个命名空间下“容器”运行进程无法访问其容器外部信息或在另一个容器内部运行信息原因。...在此示例,我将使用Z shell(Zsh),因为我正在计算机上运行Bash shell。如果您在计算机上运行Zsh,请使用Bash或tcsh或其他当前未运行Shell。...为测试命令创建新命名空间: $ sudo unshare --fork --pid --mount-proc zsh % 由于Zsh是交互式外壳程序,因此启动时可以方便地将您带入其命名空间。...了解命名空间存在于主机环境更广泛名称空间上下文中(本演示,这是您计算机,但在现实世界,主机通常是服务器或混合云)可以帮助您了解容器化应用程序行为方式原因他们方式。

    1.4K00

    写给前端同学终端修炼手册

    有了,终端应用程序并不能万事大吉,我们还需要确保我们运行是正确Shell语言。 配置Bash或者Zsh 当我们终端输入命令并按下Enter时,那个命令会由Shell语言解释。...它本质上是运行在终端应用程序解释器。 最流行Shell语言是Bash[2]。这是大多数Linux发行版默认使用Shell语言。当我们在网上看到命令行指令时,有很大可能性就是Bash。...我们应该输入美元符号后所有内容。 为什么安装说明会包括一个实际上不是命令一部分符号呢!?这是因为Bash shell语言中,$ 是提示符字符,显示提示符末尾。...Zsh shell语言中,默认提示符由一个箭头当前目录名称组成,如→ PersonWorkSpace。 ❝但是,为什么之前是波浪号,而不是父目录名称?...标志(Flags) 前面我提到,Bash/Zsh命令就像JavaScript函数。但在涉及到标志时,这个类比就有点不适用了。 ❝标志是修改命令行为预定义方式。

    13310

    Linux基础命令行使用技巧

    5.0.2 (x86_64-redhat-linux-gnu) 两者之间对比: bash : 除了sh就是它是最常用shell,使用广泛多数发行版系统默认bash zsh: 用户交互功能比bash...(Linux默认方式)与vi两种编辑模式,注意这里只是小试牛刀,由于本人喜欢使用vi所以专门做了一篇文章进行记录; 设置编辑模式 描述:bashzsh 都提供了 Emacs vi 两种编辑模式...[[email protected] ~] echo WORDCHARS #bash 空行 # zsh 对 “词” 界定跟 bash 有所不同~ echo WORDCHARS*?...WeiyiGeek. shopt 命令 描述:用于显示设置shell行为选项,通过这些选项以增强shell易用性。 PS:若不带任何参数选项,则可以显示所有可以设置shell操作选项。...bash每个命令后检查窗口大小,如果有必要,就更新LINESCOLUMNS值 cmdhist on #bash试图将一个多行命令所有行保存在同一个历史项.这是的多行命令重新编辑更方便

    5.8K63

    提升你 Vim 技能 5 个方法

    我将说明如何使用 Bash Z shell(zsh)来实现此目的,zsh 现在是 macOS 用户默认 shell(自 Catalina 起)。... Bash 中将 Vim 设置为默认 Bash 通过点文件组合来管理设置。最常见做法将你编辑器添加到主目录 .bashrc 文件,但也可以将其添加到 .bash_profile 。... zsh 中将 Vim 设置为默认 zsh 是一种越来越流行终端仿真器,尤其是苹果公司基于 FreeBSD Darwin 系统最近从 Bash 转向 zsh 以来。...重要模式 Vim 依赖于不同模式来定义键盘敲击行为。需要了解重要模式有: 普通模式:默认模式,主要用于导航打开文件。...Vim 8.2 分割、标签终端 有两种方法可以将你正在处理文件分割成不同视图:它们可以并排显示,也可以使用应用程序标签页全屏(窗口)中切换。

    80420
    领券