2013-10-01 3 views
2

Я нашел много ответов об этом в 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") 

, но она не может решить эту проблему. Что случилось в моем коде? и как это исправить?

Спасибо в продвижении.

+0

Я не глава 'bash', но я думаю, что выражение диапазона, например' {1..31} ', может быть, новая функция для bash. Какую версию ты используешь? 'bash --version', должен выводить вашу версию. Добавьте этот бит информации к вашему вопросу выше. Удачи. – shellter

+0

Вы правы. Тем не менее, я выполнял это выражение много раз, но это было неудачно в случае, о котором я говорил выше. FYI, моя версия bash: 3.2.25 (1) -release (x86_64-redhat-linux-gnu) – PhatHV

+0

Расширение скобки было в 'bash' в течение длительного времени. Однако это происходит до расширения параметра; поскольку фигурные скобки не содержат двух целых литералов, выражение обрабатывается буквально как строка '{1 .. $ {LASTDAY}}'. Затем применяется расширение параметра для создания '{1..31}'. Эта строка отклоняется кодом, который получает '$ i', поскольку эта строка не является целым числом. – chepner

ответ

8

Используйте следующие вместо for i in {1..$Lastday}

for i in $(seq 1 ${LASTDAY}) ; do echo $i done 

Это будет работать.

+0

Спасибо вам большое. Это решает мою проблему. – PhatHV

+2

Будьте осторожны с длиной диапазона - некоторые оболочки имеют ограничение на длину линии 64 KiB. В bash использование может использовать обычные ** для ((expr1; expr2; expr3)); сделать список; сделанный** – gavenkoa

Смежные вопросы