bashshell:语法上的区别是什么?
我在教程中看到了两种在BASH shell中为if语句编写语法的方法: 除非我在变量周围加上引号并添加额外的[and]: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
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