Я нашел много ответов об этом в StackOverflow, но я не могу применить их к моему коду.Как преобразовать строку в целое число в Bash?
Я использовал эту команду, чтобы получить последний день текущего месяца:
LASTDAY=`cal $(date +"%m %Y") | grep . | fmt -1 | tail -1`
Затем я использую этот код:
for i in {1..${LASTDAY}}
do
# code for processing here!
done
Но всегда получить это предупреждение: строка 12: [{ 1..31}: ожидаемое целочисленное выражение
и i является {1..31}, но я ожидал я это число в диапазоне [1,31]
Я попытался это:
LASTDAY=$((LASTDAY+0))
LASTDAY=$(echo "$LASTDAY - 0" | bc)
LASTDAY=$(printf "%d" "$LASTDAY")
, но она не может решить эту проблему. Что случилось в моем коде? и как это исправить?
Спасибо в продвижении.
Я не глава 'bash', но я думаю, что выражение диапазона, например' {1..31} ', может быть, новая функция для bash. Какую версию ты используешь? 'bash --version', должен выводить вашу версию. Добавьте этот бит информации к вашему вопросу выше. Удачи. – shellter
Вы правы. Тем не менее, я выполнял это выражение много раз, но это было неудачно в случае, о котором я говорил выше. FYI, моя версия bash: 3.2.25 (1) -release (x86_64-redhat-linux-gnu) – PhatHV
Расширение скобки было в 'bash' в течение длительного времени. Однако это происходит до расширения параметра; поскольку фигурные скобки не содержат двух целых литералов, выражение обрабатывается буквально как строка '{1 .. $ {LASTDAY}}'. Затем применяется расширение параметра для создания '{1..31}'. Эта строка отклоняется кодом, который получает '$ i', поскольку эта строка не является целым числом. – chepner