在 BASH shell 中,我在教程中看到了两种 if 语句的语法:
如果没有给变量加引号并添加额外的 [ 和 ],这种方式将不起作用:
if [[ "$step" -eq 0 ]]
这个变量不需要加引号,也不需要额外的 [ 和 ] 就可以正常工作:
if [ $step -ge 1 ] && [ $step -le 52 ]
哪种方式是正确的并且最佳实践?它们之间有什么区别?谢谢!
在 BASH shell 中,我在教程中看到了两种 if 语句的语法:
如果没有给变量加引号并添加额外的 [ 和 ],这种方式将不起作用:
if [[ "$step" -eq 0 ]]
这个变量不需要加引号,也不需要额外的 [ 和 ] 就可以正常工作:
if [ $step -ge 1 ] && [ $step -le 52 ]
“在引用变量时,通常建议将其名称括在双引号中” -- http://tldp.org/LDP/abs/html/quotingvar.html
if [ $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 operator expected
但是,使用if [ "$x" -eq 0 ]
则会出现另一种错误:example.sh: line 2: [: : integer expression expected
因此,最好将变量放在引号内...
if [[ .... ]]
语法在条件语句中包含正则表达式时特别有用 -- http://honglus.blogspot.com/2010/03/regular-expression-in-condition.html
编辑:当我们处理字符串时--
#!/bin/bash
if [ $x = "name" ]
then
echo "hello"
fi
example.sh: line 2: [: =: unary operator expected
但是,如果您使用if [ "$x" = "name" ]
,它将正常运行(即没有错误),并且if
语句将被评估为false
,因为x
的值为null
,与name
不匹配。请注意保留HTML标记。
$step
为空或包含空格,否则两者都应该有效。 - user123444555621if (( 1 <= step && step < 52 )); ...
- glenn jackman