For*_*rdi 1 shell shell-script subshell
有人可以向我解释这里发生了什么吗?
脚本:
#!/bin/sh
SKIP="unity-launcher|unity-panel|unity-dash|Hud|XdndCollectionWindowImp|Desktop"
WINS=()
wmctrl -l | grep -Ev " (${SKIP})" | cut -d \ -f 1 | while read window; do
WINS=( ${WINS[@]} $window )
echo "Found window: $window; New size: ${#WINS[@]}"
done
echo "Total window count: ${#WINS[@]}"
echo "Window IDs:"
for i in "${WINS[@]}"; do
echo " $i"
done
Run Code Online (Sandbox Code Playgroud)
输出:
Found window: 0x0380000a; New size: 1
Found window: 0x038002ae; New size: 2
Found window: 0x03800a33; New size: 3
Found window: 0x03000001; New size: 4
Found window: 0x04c00004; New size: 5
Total window count: 0
Window IDs:
Run Code Online (Sandbox Code Playgroud)
预期的:
Found window: 0x0380000a; New size: 1
Found window: 0x038002ae; New size: 2
Found window: 0x03800a33; New size: 3
Found window: 0x03000001; New size: 4
Found window: 0x04c00004; New size: 5
Total window count: 5
Window IDs:
0x0380000a
0x038002ae
0x03800a33
0x03000001
0x04c00004
Run Code Online (Sandbox Code Playgroud)
本质上,在while循环结束时,WINS数组以某种方式重置,我不知道为什么。在我不知道的 bash 中是否有一些奇怪的作用域?
小智 5
管道创建子壳,这些子壳不能改变它们上面的进程中的值。尝试:
while read window; do
WINS=( ${WINS[@]} $window )
echo "Found window: $window; New size: ${#WINS[@]}"
done < <(wmctrl -l | grep -Ev " (${SKIP})" | cut -d \ -f 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |