【发布时间】:2013-09-17 17:42:22
【问题描述】:
我习惯了 csh,所以不得不使用 bash 有点烦人。这段代码有什么问题?
if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
【问题讨论】:
-
这也是无效的
csh。
标签: bash if-statement
我习惯了 csh,所以不得不使用 bash 有点烦人。这段代码有什么问题?
if[$time > 0300] && [$time < 0900]
then
$mod=2
else
$mod=0
fi
【问题讨论】:
csh。
标签: bash if-statement
按照标准应该是
if [ "$time" -gt 300 ] && [ "$time" -lt 900 ]
then
mod=2
else
mod=0
fi
在普通的 shell 脚本中,您使用 [ 和 ] 来测试值。在[ ] 中没有> 和< 等类似算术的比较运算符,只有-lt、-le、-gt、-ge、-eq 和-ne。
当您使用 bash 时,首选 [[ ]],因为变量不受拆分和路径名扩展的影响。您也不需要使用 $ 扩展变量来进行算术比较。
if [[ time -gt 300 && time -lt 900 ]]
then
mod=2
else
mod=0
fi
此外,使用(( )) 进行算术比较可能最适合您的偏好:
if (( time > 300 && time < 900 ))
then
mod=2
else
mod=0
fi
【讨论】:
$ 添加到mod? $mod=0。在 bash 中,它会被解释为 $mod 的扩展,它是一个空字符串加上 =0。
FOO= bar 这样的东西被解释为在 FOO 设置为空字符串的环境中运行命令 bar。