Этот прост:
grep -E "199[5-9]"
справляется с задачей. Это легко, потому что предполагаемый диапазон чисел совпадает с диапазоном символьных кодов. Для более сложного примера, например, 1998-2003, вам придется разделить диапазон соответствующим образом:
grep -E "199[8-9]|200[0-3]"
Эти утверждения не эквивалентны.
Первый проверяет, является ли $?
не -пустой строкой ; так будет всегда, поэтому тело первого if
всегда будет работать.[
string
]
это
True if the string string is not the null string; otherwise, false.
Второй проверяет успешность tput setaf 1
или, альтернативно, является ли его статус выхода (и, следовательно,$?
)нулевым . Тело второго if
запустится только после успешного выполнения команды tput
. Это в целом эквивалентно
tput setaf 1
if [ $? -eq 0 ]
...
Результат, который вы описываете, указывает на то, что tput setaf 1
завершается с некоторым не -нулевым кодом (, например, 1 ). «1
» — это не -пустая строка, но она не равна нулю. tput setaf 1 ; echo $?
покажет вам, что такое фактический код, который вы затем сможете исследовать дальше.