2013-02-22 7 views
1

Просто немного вопроса о правильном способе делать Пост-инкремент в bash.Bash Post Increment

while true; do 
    VAR=$((CONT++)) 
    echo "CONT: $CONT" 
    sleep 1 
done 

VAR начинается с 1 в этом случае.

CONT: 1 
CONT: 2 
CONT: 3 

Но если я это сделать:

while true; do 
    echo "CONT: $((CONT++))" 
    sleep 1 
done 

Он начинается с 0.

CONT: 0 
CONT: 1 
CONT: 2 

Кажется, что первый случай ведет себя нормально, потому что ((CONT ++)) будет оценивать CONT (undefined, ¿0?) И добавьте +1.

Как я могу получить поведение, например, в инструкции echo для назначения переменной?

EDIT: В моем первом примере вместо повторения CONT, я должен был повторить VAR, так что это работает нормально, так что это была моя ошибка с самого начала.

ответ

5

как случаи в порядке и разумные.

foo++ будет сначала возвращать текущее значение (до автоинкремента) foo, затем автоинкремент.

в вашем случае 1, если изменить в echo "CONT: $VAR", это даст тот же результат, как при 2.

Если вы хотите иметь 1,2,3..., с автоматическим приращением, вы можете попробовать:

echo "CONT: $((++CONT))" 
+0

Спасибо, я это понимаю, но я хотел бы сделать это в назначении переменной, а не в эхо. В эхом он работает нормально, но не тогда, когда я назначаю переменную (я не знаю, как правильно начать с 0). – JorgeeFG

+0

Я только заметил, что он работает хорошо, и была моя ошибка в первом примере, вместо того, чтобы повторять VAR, я повторил CONT. То почему он не работал. – JorgeeFG

+0

@Jorge ваш первый случай ('$ VAR') начинается с 0 – Kent

1

Поступайте с помощью приращения, возвращайте значение , предшествующее, а затем увеличивайте значение.

В вашем первом примере вы используете значение после, оно было увеличено. В своем втором примере вы используете его до, вы его увеличиваете.

Если вы хотите такой же результат, как и в первом примере, вы должны использовать PREfix приращение

while true; do 
    echo "CONT: $((++CONT))" 
    sleep 1 
done 
+0

Спасибо, я это понимаю, но я хотел бы сделать это в присваивании переменной, а не в эхо. В эхом он работает нормально, но не тогда, когда я назначаю переменную (я не знаю, как правильно начать с 0). – JorgeeFG

+0

Я только заметил, что он работает хорошо, и была моя ошибка в первом примере. – JorgeeFG

2

Давайте упростить код, чтобы сделать его проще для понимания.

Следующая:

VAR=$((CONT++)) 
    echo "CONT: $CONT" 

можно разбить на следующие этапы:

VAR=$CONT   # assign CONT to VAR 
    CONT=$((CONT+1))  # increment CONT 
    echo "CONT: $CONT" # print CONT 

Similary, следующее заявление:

echo "CONT: $((CONT++))" 

эквивалентно:

echo "CONT: $CONT" # print CONT 
CONT=$((CONT+1))  # then increment CONT 

Надеюсь, это поможет объяснить, почему вы видите это поведение.

+0

Я только заметил, что он работает хорошо, и в первом примере моя ошибка, вместо того, чтобы повторять VAR, я повторил CONT. То почему он не работал. – JorgeeFG

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

  • Нет связанных вопросов^_^