为什么 ksh 中的以下 IF 条件总是评估为 true?

2023-12-13

考虑一下,下面的代码按预期工作:

if [[ $SOME_VARIABLE = "TRUE" ]]; then
   echo "Only echoed when \$SOME_VARIABLE stores string \"TRUE\"."
fi

但是当我删除相等运算符周围的空间时,它总是评估为 0 退出状态(至少这是我认为它必须返回的值,因为它被视为 true):

if [[ $SOME_VARIABLE="TRUE" ]]; then
   echo "Always true."
fi

UPDATE:

只是为了确认问题是否在于相等运算符:

#!usr/bin/ksh

SOME_VARIABLE=FALSE

if [[ $SOME_VARIABLE == "TRUE" ]]; then
   echo "Only echoed when \$SOME_VARIABLE stores string \"TRUE\"."
fi


if [[ $SOME_VARIABLE=="TRUE" ]]; then
   echo "Always true."
fi


[kent@TEST]$ sh test.sh
Always true.

UPDATE:

概括:

  1. Using =是相同的==上面,但是已经过时了。
  2. 时刻注意你的空间。

From ksh(1):

条件表达式。

   A conditional expression is used with the [[ compound command  to  test
   attributes  of  files and to compare strings.  Field splitting and file
   name generation are not performed on the words between [[ and ]].  Each
   expression  can  be constructed from one or more of the following unary
   or binary expressions:

   **string** True, if string is not null.

   ...

所以下面的表达式是正确的:

[[ somestring ]]

现在考虑你的第二个例子:

if [[ $SOME_VARIABLE="TRUE" ]]; then

假设$SOME_VARIABLE是“SOMETHINGNOTTRUE”,这扩展到:

if [[ SOMETHINGNOTTRUE=TRUE ]]; then

“SOMETHINGNOTTRUE=TRUE”是一个非零长度字符串。因此这是真的。

如果你想在里面使用运算符[[,您必须按照文档中的规定在它们周围放置空格(注意空格):

   string == pattern
          True, if string matches pattern.  Any part  of  pattern  can  be
          quoted to cause it to be matched as a string.  With a successful
          match to a pattern, the .sh.match array  variable  will  contain
          the match and sub-pattern matches.
   string = pattern
          Same as == above, but is obsolete.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 ksh 中的以下 IF 条件总是评估为 true? 的相关文章

  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 如何通过 shell 脚本确定网页是否存在?

    我正在尝试制作一个程序 可以将一系列漫画扫描转换为一个 pdf 文件 并且我不想尝试下载图片来确定我是否有正确的网址 是否有一个 shell 脚本命令可以用来检查网页是否存在 在 NIX 下 您可以使用curl发出一个简单的HEAD要求 H
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • UNIX/MacOS 上静态文件的“临时 Web 服务器”?

    是否有一个像小型网络服务器这样的东西 我可以从命令行调用它 只从本地文件系统获取文件并通过特定端口上的 HTTP 为它们提供服务 我希望能够做这样的事情 cd Sites mysite serve 10 0 1 1 8080 这应该会启动一
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 了解多个进程的并发文件写入

    从这里 UNIX 中文件追加是原子的吗 https stackoverflow com questions 1154446 is file append atomic in unix 考虑多个进程打开同一个文件并向其追加内容的情况 O AP
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 如何在 shell 脚本中操作 $PATH 元素?

    有没有一种惯用的方法从类似 PATH 的 shell 变量中删除元素 这就是我想要的 PATH home joe bin usr local bin usr bin bin path to app bin and remove or rep
  • 我在函数的最后一次递归调用中得到“方案应用程序而不是过程”

    所以这是代码 define time prime test n newline display n start prime test n runtime define start prime test n start time if pri
  • 如何在 Bash 中给定超时后终止子进程?

    我有一个 bash 脚本 它启动一个子进程 该进程时不时地崩溃 实际上是挂起 而且没有明显的原因 闭源 所以我对此无能为力 因此 我希望能够在给定的时间内启动此进程 如果在给定的时间内没有成功返回 则将其终止 有没有simple and r
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 为什么这个脚本永远不会运行?

    我有以下 JavaScript 语句 该语句在页面加载时执行 变量u1使用以下值之一填充 BBSLoan Accept PPI No 60Months BBSLoan Refer PPI No 60Months HSBSLoan Accep
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • “条件长度 > 1 并且仅使用第一个元素”错误

    我对 f 语句有疑问 因为它返回给我以下错误消息 条件长度 gt 1 并且仅使用第一个元素 我有一个名为 data summary 的数据框 我想创建两个新变量vol up and vol down取决于我的数据框的其他变量 这是我的脚本代
  • 如何检测脚本是否正在被获取

    我有一个脚本 我不希望它调用exit如果它正在被采购 我想检查一下是否 0 bash但是如果脚本源自另一个脚本 或者用户从不同的 shell 获取它 例如ksh 有没有可靠的方法来检测脚本是否来源 稳健的解决方案bash ksh zsh 包
  • C# 中的 Unix 套接字

    我正在尝试使用 Mono 的 UnixEndPoint 但在使用它之前就失败了 我在 64 位 Windows 7 系统上运行 Xamarind net 4 5 下面是一些代码 证明单一组合不起作用 foreach SocketType s

随机推荐

  • 使用 Selenium 访问 Shadow DOM 树

    是否可以使用 Selenium Chrome webdriver 访问 Shadow DOM 中的元素 正如预期的那样 使用普通的元素搜索方法不起作用 我已经看到了对切换到子树w3c 上的规范 但找不到任何实际的文档 示例等 有人在这方面取
  • Networkx:绘制平行边

    使用以下代码从数据框中绘制图表 import pandas as pd import networkx as nx df pd DataFrame id emp 13524791000109 12053850000137 470782100
  • 禁用所有移动设备中的滚动

    这听起来好像互联网上应该有一个解决方案 但我不知道为什么我找不到它 我想禁用移动设备上的水平滚动 基本上试图实现这一目标 body overflow x hidden disable horizontal scrolling 这可能是相关信
  • 在matlab中将链接插入图像?

    我想在 matlab 中的图像中添加指向文档的链接 我有一个特定的区域 我想放置链接 例如 我希望图像中 x 40 y 120 处的位置有文档地址的链接 类似于下面的内容 我知道这不是正确的 matlab 代码 text 40 120 a
  • Qt和gcov,不生成覆盖率文件

    我正在尝试获取我为 Arora 浏览器编写的组件的代码覆盖率 该组件是使用 C 和 Qt 框架编写的 我无法使用 gcov 程序 无论是在 Gnu Linux 还是 Mac Os X 下 我尝试了在互联网上找到的所有内容 还通过强制自动编辑
  • Heroku rake db:migrate 不创建表 (Rails 5)

    我有一个 Rails 5 应用程序 我想销毁并重建我的实时数据库 网站尚未启动 所以我遵循了应该有效的步骤 它们过去曾经有效 heroku pg 重置 HEROKU POSTGRESQL HEROKUCOLOR URL confirm 应用
  • 如何在javascript中获取该元素的innerHTML?

    很简单的问题 我有一个元素 标签 它有一个 onclick 来调用 JavaScript 函数 除此之外 我希望这个函数能够回显调用它的元素的innerHTML 因此 在这种情况下 atag 的innerHTML 我该怎么做呢
  • 如何为组创建属性并在 hdf5 文件系统中访问它们?

    我想在 hdf5 文件中创建两个组 第一组 h5md团体简介和 颗粒 脂质组组2描述 前者仅包含一个直接属性 版本 1 0 和两个组创建者和作者及其属性 因此这里没有数据集 在 粒子 脂质组中 唯一缺少的部分是盒子组盒组说明 最少的信息是两
  • 如何围绕任意点旋转一组 2D 形状

    我正在创建一个 Body 类 它将一堆 2D 形状组合在一起 形成一个可移动 可旋转的主体 我需要知道的是如何旋转每个单独的形状 使其看起来像是整个身体都在旋转 而不是每个形状都围绕其中心旋转 我不能只是将每个形状的旋转中心更改为同一点 因
  • 带有开始和停止按钮的 Google Sheets 秒表

    我是 Google Apps Script 和 Java 的初学者 但我需要 Google Sheets 中的秒表 具有启动和停止功能 理想情况下 该按钮应该是一个切换按钮 这样我只需一个按钮即可启动和停止秒表 并且应该显示时间 有人可以帮
  • sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度

    我正在尝试根据内容制作具有动态单元格高度的 UITableView 我的应用程序是一个文章查看器 我尝试用这些函数计算单元格的高度 func heightForView text String font UIFont width CGFlo
  • 设置货币格式而不进行四舍五入

    我需要将十进制数字格式化为货币 但我不希望在此过程中发生任何舍入 例如 示例文化是 en US Dim money 1234 556789D money ToString C Yields 1 234 56 notice the round
  • 给定 N 个整数的绝对值,找到 N/2 个负值和 N/2 个正值的组合,其总和最接近 0

    假设我有一个包含 10 个数字的数组 其绝对值范围可以从 1 到 10 值可以重复 这方面的一个例子可能是 2 4 2 6 9 10 1 7 6 3 我们可以为每个数字分配一个正号或负号 但每个组合中应该始终有 5 个负数和 5 个正数 例
  • 如何使用OpenCV裁剪圆形图像?

    我想知道 openCV 中是否有一种方法可以让我在两个圆之间裁剪图像 从而忽略较小内圆中的所有内容和较大圆之外的所有内容 就像甜甜圈的形状 这是在 Python OpenCV 中执行此操作的一种方法 读取输入并获取其尺寸 定义两个圆的半径和
  • 右键单击节点上的 JTree 和下拉选项

    我正在尝试使用 JTree 并为所有父节点和子节点实现不同的下拉列表 这是我所做的 pmTree addMouseListener new java awt event MouseAdapter Override public void m
  • 我无法在 .net (vb.net) webbrowser 控件中使用 websocket

    我正在尝试在 Webbrowser 控件内运行网页 其中包含与 Websocket 的连接 该控件无法连接到 Websocket 当我在IE中测试时 一切运行正常 但在Visual Studio内的Webbrowser控件中 页面无法连接到
  • 在未连接的计算机上使用 git

    我有时会在两台未连接的计算机上进行开发的项目 一个典型的例子是在 BIDS 中创建报告 工作流程如下所示 我在公司 TFS 中创建一个项目 文件夹 使用git tfs创建本地git仓库 开发报告并提交到本地存储库 以及一些到 tfs 的签入
  • 在嵌套 JAR 内的文件夹中查找文件名

    当我的应用程序打包为 JAR 时 我无法访问目标文件夹 images 我不是在获取单个文件后 我想要的是 images 文件夹中所有 jpg 文件的列表 我试过这个 URI uri getClass getClassLoader getRe
  • 如果段错误不可恢复,为什么将其称为错误(而不是中止)?

    我对术语的以下理解是这样的 1 中断是由硬件发起的 通知 用于调用操作系统运行其处理程序 2 陷阱是由软件发起的 通知 用于调用操作系统运行其处理程序 3 故障是处理器在发生错误但可恢复时引发的异常 4 中止是处理器在发生错误但不可恢复时引
  • 为什么 ksh 中的以下 IF 条件总是评估为 true?

    考虑一下 下面的代码按预期工作 if SOME VARIABLE TRUE then echo Only echoed when SOME VARIABLE stores string TRUE fi 但是当我删除相等运算符周围的空间时 它