mas*_*uch 15 variables bash loops
dpkg --list |grep linux-image |grep "ii " | while read line
do
arr=(${line})
let i=i+1
_constr+="${arr[2]} "
done
echo $i
echo ${_constr}
Run Code Online (Sandbox Code Playgroud)
循环外部的echo语句不显示预期变量.
我应该如何使变量的内容在循环外传播?
Sor*_*gal 29
问题是管道,而不是循环.试试这种方式
let i=0
declare -a arr
while read -r line ; do
arr=(${line})
let i=i+1
_constr+="${arr[2]} "
done < <(dpkg --list |grep linux-image |grep "ii ")
echo $i
echo ${_constr}
Run Code Online (Sandbox Code Playgroud)
您还应该为了清晰度预先声明全局变量,如上所示.
正如布拉戈维斯特在评论中指出的那样,管道在子壳中执行.使用进程替换(这是< <(commands)语法)将所有内容保持在同一进程中,因此可以更改全局变量.
顺便提一下,您的管道也可以改进
dpkg --list |grep '^ii.*linux-image'
Run Code Online (Sandbox Code Playgroud)
一个少grep担心的调用.