2016-06-25 2 views
1

У меня есть сводный код для этого простого цикла. Я не понимаю, почему счетчик tot_add не суммируется, а 1 все время:Смещение переменной Bash в цикле (без трубы)

cd /path/to/my/workspace; 
tot_add=0; 
for d in ./*/; 
do (cd "$d"; 
let tot_add=tot_add+1; 
echo $tot_add; 
) done 

ожидаемый результат:

1 
2 
3 

фактический результат

1 
1 
1 

Я прочитал этот ответ о подоболочке с трубкой.

BASH FAQ entry #24: "I set variables in a loop. Why do they suddenly disappear after the loop terminates? Or, why can't I pipe data to read?"

Однако, я не использую символ трубы здесь.

+1

Вы используете '(' ... ')'. Это явно создает подоболочку. – melpomene

ответ

2

() порождает подоболочку.

Так что на самом деле быть добавлены в субоболочке и когда подоболочка выходит из родительской оболочки не имеет равнодействующей, а снова начинается с 0, поэтому вы всегда получаете 1.

Чтобы устранить эту проблему, избавиться от подоболочка.

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