Modify global variable in while loop [duplicate]
Clash Royale CLAN TAG#URR8PPP
up vote
10
down vote
favorite
This question already has an answer here:
Why is my variable local in one 'while read' loop, but not in another seemingly similar loop?
4 answers
I have a script that process a folder, and count the files in the mean time.
i=1
find tmp -type f | while read x
do
i=$(($i + 1))
echo $i
done
echo $i
However, $i
is always 1
, how do I resolve this?
bash
marked as duplicate by muru, Stephen Rauch, peterh, G-Man, taliezin Nov 6 '17 at 7:52
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |Â
up vote
10
down vote
favorite
This question already has an answer here:
Why is my variable local in one 'while read' loop, but not in another seemingly similar loop?
4 answers
I have a script that process a folder, and count the files in the mean time.
i=1
find tmp -type f | while read x
do
i=$(($i + 1))
echo $i
done
echo $i
However, $i
is always 1
, how do I resolve this?
bash
marked as duplicate by muru, Stephen Rauch, peterh, G-Man, taliezin Nov 6 '17 at 7:52
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10
add a comment |Â
up vote
10
down vote
favorite
up vote
10
down vote
favorite
This question already has an answer here:
Why is my variable local in one 'while read' loop, but not in another seemingly similar loop?
4 answers
I have a script that process a folder, and count the files in the mean time.
i=1
find tmp -type f | while read x
do
i=$(($i + 1))
echo $i
done
echo $i
However, $i
is always 1
, how do I resolve this?
bash
This question already has an answer here:
Why is my variable local in one 'while read' loop, but not in another seemingly similar loop?
4 answers
I have a script that process a folder, and count the files in the mean time.
i=1
find tmp -type f | while read x
do
i=$(($i + 1))
echo $i
done
echo $i
However, $i
is always 1
, how do I resolve this?
This question already has an answer here:
Why is my variable local in one 'while read' loop, but not in another seemingly similar loop?
4 answers
bash
asked Nov 6 '17 at 2:52
daisy
27.5k46159290
27.5k46159290
marked as duplicate by muru, Stephen Rauch, peterh, G-Man, taliezin Nov 6 '17 at 7:52
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by muru, Stephen Rauch, peterh, G-Man, taliezin Nov 6 '17 at 7:52
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10
add a comment |Â
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
4
down vote
accepted
In your example the while-loop is executed in a subshell, so changes to the variable inside the while-loop won't affect the external variable. This is because you're using the loop with a pipe, which automatically causes it to run in a subshell.
Here is an alternative solution using a while loop:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
And here is the same approach using a for-loop:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
For more information see the following posts:
A variable modified inside a while loop is not remembered
Bash Script: While-Loop Subshell Dilemma
Also look at the following chapter from the Advanced Bash Scripting Guide:
- Chapter 23. Process Substitution
regarding the first solution, isn't it process substitution like so< <(find ...)
instead of like so<<<(find ...)
.... yours is the latter and that seems incorrect.
â Alexander Mills
Jun 22 at 3:47
add a comment |Â
up vote
1
down vote
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
https://stackoverflow.com/questions/7390497/bash-propagate-value-of-variable-to-outside-of-the-loop
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
In your example the while-loop is executed in a subshell, so changes to the variable inside the while-loop won't affect the external variable. This is because you're using the loop with a pipe, which automatically causes it to run in a subshell.
Here is an alternative solution using a while loop:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
And here is the same approach using a for-loop:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
For more information see the following posts:
A variable modified inside a while loop is not remembered
Bash Script: While-Loop Subshell Dilemma
Also look at the following chapter from the Advanced Bash Scripting Guide:
- Chapter 23. Process Substitution
regarding the first solution, isn't it process substitution like so< <(find ...)
instead of like so<<<(find ...)
.... yours is the latter and that seems incorrect.
â Alexander Mills
Jun 22 at 3:47
add a comment |Â
up vote
4
down vote
accepted
In your example the while-loop is executed in a subshell, so changes to the variable inside the while-loop won't affect the external variable. This is because you're using the loop with a pipe, which automatically causes it to run in a subshell.
Here is an alternative solution using a while loop:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
And here is the same approach using a for-loop:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
For more information see the following posts:
A variable modified inside a while loop is not remembered
Bash Script: While-Loop Subshell Dilemma
Also look at the following chapter from the Advanced Bash Scripting Guide:
- Chapter 23. Process Substitution
regarding the first solution, isn't it process substitution like so< <(find ...)
instead of like so<<<(find ...)
.... yours is the latter and that seems incorrect.
â Alexander Mills
Jun 22 at 3:47
add a comment |Â
up vote
4
down vote
accepted
up vote
4
down vote
accepted
In your example the while-loop is executed in a subshell, so changes to the variable inside the while-loop won't affect the external variable. This is because you're using the loop with a pipe, which automatically causes it to run in a subshell.
Here is an alternative solution using a while loop:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
And here is the same approach using a for-loop:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
For more information see the following posts:
A variable modified inside a while loop is not remembered
Bash Script: While-Loop Subshell Dilemma
Also look at the following chapter from the Advanced Bash Scripting Guide:
- Chapter 23. Process Substitution
In your example the while-loop is executed in a subshell, so changes to the variable inside the while-loop won't affect the external variable. This is because you're using the loop with a pipe, which automatically causes it to run in a subshell.
Here is an alternative solution using a while loop:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
And here is the same approach using a for-loop:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
For more information see the following posts:
A variable modified inside a while loop is not remembered
Bash Script: While-Loop Subshell Dilemma
Also look at the following chapter from the Advanced Bash Scripting Guide:
- Chapter 23. Process Substitution
edited Nov 6 '17 at 3:17
answered Nov 6 '17 at 3:05
igal
4,830930
4,830930
regarding the first solution, isn't it process substitution like so< <(find ...)
instead of like so<<<(find ...)
.... yours is the latter and that seems incorrect.
â Alexander Mills
Jun 22 at 3:47
add a comment |Â
regarding the first solution, isn't it process substitution like so< <(find ...)
instead of like so<<<(find ...)
.... yours is the latter and that seems incorrect.
â Alexander Mills
Jun 22 at 3:47
regarding the first solution, isn't it process substitution like so
< <(find ...)
instead of like so <<<(find ...)
.... yours is the latter and that seems incorrect.â Alexander Mills
Jun 22 at 3:47
regarding the first solution, isn't it process substitution like so
< <(find ...)
instead of like so <<<(find ...)
.... yours is the latter and that seems incorrect.â Alexander Mills
Jun 22 at 3:47
add a comment |Â
up vote
1
down vote
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
https://stackoverflow.com/questions/7390497/bash-propagate-value-of-variable-to-outside-of-the-loop
add a comment |Â
up vote
1
down vote
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
https://stackoverflow.com/questions/7390497/bash-propagate-value-of-variable-to-outside-of-the-loop
add a comment |Â
up vote
1
down vote
up vote
1
down vote
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
https://stackoverflow.com/questions/7390497/bash-propagate-value-of-variable-to-outside-of-the-loop
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
https://stackoverflow.com/questions/7390497/bash-propagate-value-of-variable-to-outside-of-the-loop
answered Nov 6 '17 at 3:11
Kamaraj
2,7001312
2,7001312
add a comment |Â
add a comment |Â
Also see: A variable modified inside a while loop is not remembered on Stack Overflow
â muru
Nov 6 '17 at 4:10