条件在 Bash 中的 if 语句中">"是什么意思?



嗨,我似乎在任何地方都找不到这个。这个正斜杠是什么>bash中if语句中的意思?

例如:

if [ "$count" > 0 ]; then
echo hello
else
echo goodbye
fi

字符<>(以及其他字符(在shell脚本中是特殊的:它们执行输入/输出重定向。因此,当你试图在这样的测试表达式中使用它们时;正常意义";的";小于";以及";大于";,你需要逃离它们,防止它们受到外壳的特殊处理。

这类似于你可能写的方式

cat file name

在文件名或中添加空格

cat it's

对名称中包含单引号字符的文件进行cat操作。(也就是说,通常情况下,空格字符是"特殊的",因为它分隔参数,而单引号字符是特殊的,因为它引用了一些东西,所以为了让这些字符真正用作文件名的一部分,你必须引用它们,在这种情况下,使用来关闭它们的特殊含义。(

在Unix/Linux shell中,引用最终会变得复杂,因为通常有三个不同的引用字符:"'。它们的工作方式都不一样,而且规则(虽然它们大多有意义(足够复杂,我不打算在这里重复。

另一种写这篇文章的方法,避免丑陋的引用,是

if [ "$count" -gt 0 ]

事实证明,出于另一个原因,这更可取。如果您使用-gt,它将根据$count0数值进行比较,这大概就是您想要的。另一方面,如果使用>(即>(,它将执行字符串比较。在这种情况下,您可能会得到相同的结果,但一般来说,当您打算进行数字比较时,进行字符串比较可能会产生疯狂的结果。参见Charles Duffy的评论以获取示例。

  • >表示大于ASCII字母表中的字符串
  • BASH对于反斜杠符号具有不同的含义
  • 在您的示例中,>是一个符号,而不是像+>这样的两个符号
  • 对于使用>的数字,但对于算术运算,也要考虑[],您将使用(())
  • bash中的构造函数使用这个符号[[]],它用于与双括号内的这些符号进行比较
    • &&, ||, <, and >
    • 如果将单括号[]与上述符号一起使用,则BASH脚本中会出现错误,需要使用双括号

BACKSLASH的其他含义

  • 如前所述,在bash中,您使用正斜杠/作为PATH/home/user/Desktop/file1.txt,但如果您的文件名有空格,则需要ESCAPE空格,并使用反斜杠执行此操作,例如

带空格的文件名.txt

/home/alex/Desktop/file name with spaces.txt  

带有符号的文件名->[堆栈溢出]fileName.txt

/home/alex/Desktop/[Stackoverflow]fileName.txt 

你需要像这样逃离每个支架[][]

资源

Bash Constructors|Bash运算符|Ascii表格

最新更新