Исправлено ожидаемое целочисленное выражение, когда переменная может быть пустой

Спасибо Микаэлю и Кусалананде..
Я получил ожидаемый результат с:

ipconfig /all | sed -e 's/[[:space:]]*$//' | grep -A 1 'My Ethernet Server Adapter B52-2$'

ИЛИ

ipconfig /all | sed -e 's/\s*$//' | grep -A 1 'My Ethernet Server Adapter B52-2$'

В выводе ipconfig /allбыли пробелы в конце, и, следовательно, мое совпадение не сработало, с sedпробелы удалены, и, следовательно, теперь я могу найти точную строку.
Спасибо!

-1
18.03.2020, 01:37
4 ответа

Поскольку вы используете bash, просто арифметические выражения:

season=null
if ((season < 1)); then echo covid19
elif ((season < 2)); then echo trump2020
else echo '???'
fi

covid19

Для вашей реальной проблемы вы могли бы использоватьprintf -v(и, вероятно, есть много других, лучших решений):

>>> cat./script
#! /bin/bash
if ((year)); then printf -v year ' (%d)' "$year"; else year=; fi
if ((season)); then printf -v season ' - S%02d' "$season"; else season=; fi
if ((episode)); then printf -v episode 'E%02d' "$episode"; else episode=; fi
echo "$title$year$season$episode.file"

>>> export title='A Title'
>>>./script
A Title.file
>>> year=2019./script
A Title (2019).file
>>> year=2019 season=3./script
A Title (2019) - S03.file
>>> year=2019 season=3 episode=9./script
A Title (2019) - S03E09.file
>>> year=2019 season=3 episode=11./script
A Title (2019) - S03E11.file
>>> season=3 episode=11./script
A title - S03E11.file
1
28.04.2021, 23:20

Ваш сценарий пытается сравнить пустую строку с числом.

Этого можно избежать, используя выражение значения по умолчанию(:-)в расширении переменной, которая может быть не установлена ​​или установлена ​​в пустую строку.

Например:

if [ ${season:-"0"} -gt 10 ]; then BLAH...; fi

Поскольку вы также проверяете слово "null", вы также можете установить соответствующее значение по умолчанию 0при совпадении вместо того, чтобы устанавливать его в пустую строку.

1
28.04.2021, 23:20

Вы присваиваетеseason:

не числовое значение, отличное от -.
if [ "$season" == "null" ]; then season=""; fi

поэтому в вашем следующем коде значение может быть пустой строкой, отсюда и ошибка.

Вы можете контролировать числовую переменную, которая будет ложной, если она пуста, перед арифметическим сравнением:

if [[ "$season" =~ ^[0-9]+$ && "$season" -gt 10 ]]; then
  season=" - S$season"
elif [[ "$season" = "null" ]]; then
  season=" - S0"
fi
0
28.04.2021, 23:20

Объедините операторы сезона if в один оператор. Затем повторите для эпизода.

if [ "$season" == "null" ]; then
   # you could also perform some other assignment here
   season="";
elif [ "$season" -gt 10 ]; then
   season=" - S$season";
else
   season=" - S0$season";
fi
0
28.04.2021, 23:20

Теги

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