не работает, если оператор

Этот прост:

grep -E "199[5-9]"

справляется с задачей. Это легко, потому что предполагаемый диапазон чисел совпадает с диапазоном символьных кодов. Для более сложного примера, например, 1998-2003, вам придется разделить диапазон соответствующим образом:

grep -E "199[8-9]|200[0-3]"
1
22.07.2018, 05:06
1 ответ

Эти утверждения не эквивалентны.

Первый проверяет, является ли $?не -пустой строкой ; так будет всегда, поэтому тело первого 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 $?покажет вам, что такое фактический код, который вы затем сможете исследовать дальше.

8
27.01.2020, 23:12

Теги

Похожие вопросы