no
我尝试在 Linux 中运行以下 shell 脚本,但出于某种原因,它无法正常运行,即使日期匹配,我也得到了输出。有人能指出这里出了什么问题吗?
var='date +%d'
if [ $var = 17 ]
then echo yes
else echo no
fi
我正在尝试创建一个基于月份日期的自动化系统。
答案1
您var='date +%d'
本质上将字符串分配date +%d
给$var
。
你可能想要做的是将结果分配date +%d
给$var
via命令替换:
var=$(date +%d)
if [ $var = 17 ]
then echo yes
else echo no
fi
答案2
三个问题:
- 您没有正确访问变量-您需要一个
$
前缀; var
在分配命令的返回值时,您使用的是单引号而不是反引号;- 您正在比较字符串(
=
),而不是整数(-eq
)。
var=`date +%d`
if [ $var -eq 17 ]
then echo yes
else echo no
fi
更新答案
- 无
${...}
就可读性和清晰度而言,可以被认为比反引号更好- 用于
date '+%-d'
避免日期的零填充,以进行算术比较,这将导致无效的八进制数错误。
因此,可以说,同样的代码最好写成这样:
var=${date '+%-d'}
if [ $var -eq 17 ]
then echo yes
else echo no
fi