无法比较字符串

无法比较字符串

谷歌没有帮助我。

#!/bin/sh

j1=`expr "$1"`
j2=`expr "$2"`

while [ $j1 -le $j2 ]; do
    date=$(ncal -e $j1)
    month=$($date | cut -f1 -d' ')
    if [ $month=="April" ]; then
        echo $date
    fi
        j1=`expr $j1 + 1`
done

我只想打印四月的复活节日期(在我作为参数传递的两年之间的范围内)。但不知何故我得到了输出:

...

April 5 2015
./script.sh: 8: March: not found
March 27 2016
./script.sh: 8: April: not found
April 16 2017

“月份:未找到”是什么意思?尽管我只要求四月,但为什么它打印三月?

我尝试了各种方法,但总是出现一些错误。

我还需要添加一个条件,即只打印 4 月 20 日之后的日期,但我什至无法处理这个问题。

答案1

在线上

month=$($date | cut -f1 -d' ')

$date您以命令的形式执行 in 中的任何内容,并将其输出通过管道传输到cut.

我想你想要

month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' )

这里。

另外,不要$(...)在同一个脚本中混合使用反引号,这会造成混乱。就用$(...)代替吧。

比较字符串是通过以下方式完成的=

if [ "$month" = "April" ]; then

请务必用双引号引用您的变量。看忘记在 bash/POSIX shell 中引用变量的安全隐患

可以使用 完成整数算术$(( expression ))expr已经过时了。

j1=$(( "$1" ))
j2=$(( "$2" ))

...

j1=$(( j1 + 1 ))

相关内容