bashshell:语法上的区别是什么?

bashshell:语法上的区别是什么?,bash,if-statement,syntax,Bash,If Statement,Syntax,我在教程中看到了两种在BASH shell中为if语句编写语法的方法: 除非我在变量周围加上引号并添加额外的[and]: if [[ "$step" -eq 0 ]] 这一个没有在变量周围加引号,不需要额外的[and]: if [ $step -ge 1 ] && [ $step -le 52 ] 哪一种是正确的最佳实践?有什么区别?谢谢 “引用变量时,通常建议将其名称用双引号括起来”—— 如果[$step-ge 1]&&[$step-le 52]可以替换为 if[“$ste

我在教程中看到了两种在BASH shell中为if语句编写语法的方法:

除非我在变量周围加上引号并添加额外的[and]:

if [[ "$step" -eq 0 ]]
这一个没有在变量周围加引号,不需要额外的[and]:

if [ $step -ge 1 ] && [ $step -le 52 ]
哪一种是正确的最佳实践?有什么区别?谢谢

“引用变量时,通常建议将其名称用双引号括起来”——

如果[$step-ge 1]&&[$step-le 52]
可以替换为

if[“$step”-ge 1-a“$step”-le 52]

if[[“$step”-eq 0]
可以替换为
if[“$step”-eq 0]

另外,假设您有以下脚本:

#!/bin/bash
if [ $x -eq 0 ]
then
        echo "hello"
fi
当运行脚本--
example.sh:line 2:[:-eq:unary运算符时,会出现此错误

但是使用
if[“$x”-eq 0]

当运行脚本--
example.sh:line 2:[::需要整数表达式时,会出现另一个错误

因此,最好将变量放在引号内

if[[…]]
当您在条件语句中有
regex
时,语法特别有用--

编辑:当我们处理字符串时--

当运行脚本--
example.sh:line 2:[:=:一元运算符应为


但是,如果您使用
if[“$x”=“name”]
它运行良好(即没有错误),并且
if
语句被评估为
false
,因为
x
的值为
null
而与
name
不匹配,您所说的“不起作用”是什么意思。您有错误?意外行为?是的,第一个错误是为了在$step周围加双引号并添加额外的[和]错误是什么?当你得到$step时,它的值是多少?除非
$step
为空或包含空格,否则两者都应该工作。相关问题:虽然它在某些情况下可能工作,例如处理计数器的单个数字,但在处理字符串时可能会导致问题?@Edward我在回答中添加了这一点…如果您有更多问题,请告诉我。
#!/bin/bash
if [ $x = "name"  ]
then
        echo "hello"
fi