4

Я пытаюсь сравнить текущий месяц, который я получил от утилиты date, с пользовательским вводом. Даже когда я даю Окт в качестве входных данных, он дает неверный результат.

read -r month
current=`date +”%b”`
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

Я не могу понять, почему его всегда не дают в качестве вывода. Любая помощь приветствуется.

2 ответа2

2

В вашем коде есть одна очень очевидная ошибка.

Это кавычки вокруг формата даты

current=`date +”%b”`

против

current=`date +"%b"` # this is the one you should be using
2

Запустив код и введя Oct в командной строке, вы получите:

Oct         # this is what you input at the prompt
”Oct”       # this is what your input is compared against
no          # this is the result of the comparison: not true

Очевидно, что если вы введете ”Oct” сравнение будет верным:

”Oct”
”Oct”
match

Если вы не хотите вводить две закрывающие двойные кавычки, просто удалите их из строки сравнения:

read -r month
current=`date +%b`
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

Таким образом, вы можете просто ввести Oct и он будет соответствовать Oct:

Oct
Oct
match

Если вы хотите продолжить разработку своей программы, следующим шагом может быть сравнение без учета регистра: таким образом, ваши пользователи могут вводить oct , Oct или OCT не заботясь о правильном регистре.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .