無法比較字串

無法比較字串

谷歌沒有幫助我。

#!/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 ))

相關內容