bash - 为什么转义大于或小于在 bash 字符串比较中起作用?

标签 bash

如果我尝试类似的东西

if [ a < b ]

在 bash 中,它将其解释为试图将一个文件传输到另一个文件。如果我想进行字符串比较,我知道我应该像这样转义运算符:

if [ a \< b ]

我知道我可以使用 [[ 来解决这个问题,但我的问题是,为什么这样转义会起作用?

最佳答案

本质上,[是一个程序,当它的参数是 a 时,它会做你想做的事, < , b , 和 ] . (事实上​​,Bash 将 [ 实现为一个内置函数,但它将它实现为好像它是一个单独的程序,而不是对其进行特殊处理。这是为了与 [ 字面上的系统兼容路径上的单独程序。)

所以,就像写echo a \< b一样或 echo a '<' becho a "<" b让你调用echo带有参数 a , < , 和 b (以便打印 a < b ),写作 [ a \< b ][ a '<' b ][ a "<" b ]让你调用[带有参数 a , < , b , 和 ] (从而检验a是否小于b)。

关于bash - 为什么转义大于或小于在 bash 字符串比较中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814199/

相关文章:

bash - 无法从GoLang中的/etc/profile获取环境变量

linux - 更好的 bash 脚本将每行文件的两个条目读入两个变量

ruby - 让 Vim 看到 RVM ubuntu

bash - 查找空目录

php - 如何使用openssl提取和验证PDF签名(PKCS7)?

Bash 脚本和文件名中的空格

bash - 如果没有文件与 glob 匹配,则防止 "mv"命令引发错误。例如“mv *.json/dir/

arrays - 为 Bash 中的所有数组元素添加前缀

linux - Shimmercat 设置模板

linux - 在输出中,echo 命令在打印变量之后打印新行