Bash 算术表达式的副作用未执行
Bash arithmetic expression's side effects not executed
$ declare -i i=0
$ for j in {0..2}; do echo "${j} $((i++))"; done
0 0
1 1
2 2
$ for j in {0..2}; do echo "$(echo "${j} $((i++))")"; done
0 3
1 3
2 3
$
为什么 i
在第二个 for 循环中没有递增?
(是的,我知道有一个解决方法。)
它在 $(command substitution)
创建的子 shell 中递增。当该进程退出时,修改后的值将丢失。
查看相同效果的类似方法如下:
i=0
bash -c 'let i++' # Subprocess
( let i++ ) # Explicit subshell
let i++ & wait # Backgrounded process
: <( let i++ ) # Process substitution
let i++ | cat # Pipeline
echo "$i" # Still 0
$ declare -i i=0
$ for j in {0..2}; do echo "${j} $((i++))"; done
0 0
1 1
2 2
$ for j in {0..2}; do echo "$(echo "${j} $((i++))")"; done
0 3
1 3
2 3
$
为什么 i
在第二个 for 循环中没有递增?
(是的,我知道有一个解决方法。)
它在 $(command substitution)
创建的子 shell 中递增。当该进程退出时,修改后的值将丢失。
查看相同效果的类似方法如下:
i=0
bash -c 'let i++' # Subprocess
( let i++ ) # Explicit subshell
let i++ & wait # Backgrounded process
: <( let i++ ) # Process substitution
let i++ | cat # Pipeline
echo "$i" # Still 0