Shell中while循环作用域


我们知道使用while循环一行一行的处理变量中的数据的写法是这样的

local result=""
echo "${result}" |while read line;do
    ...
done

比如下面这个

local tmp=""
echo "${result}" |while read line;do
    tmp = "${result}|${line}"
done

其实我们期望的是把result中的每一行读取出来,然后使用竖线分隔的。但是上面的写法是有问题的,tmp最终根本不会得到想要的结果的。
这里这种写法while循环中无论怎么改变外面变量的值,只要一旦代码执行到循环外边,对tmp的更变都会消失,或者说在循环内部的变量是无法影响循环外边的变量的。如果想要改变循环外面数据的值,只需要加个括号,使while循环整体变成一个子shell

local tmp=""
echo "${result}" | (
  while read line;do
    tmp = "${result}|${line}"
  done
)

评论
 上一篇
Shell获取变量的指定行的数据 Shell获取变量的指定行的数据
现在有一个变量result或者有一个文件file内容如下 想要获取这个变量或文件的第一行、第二行、第三行的数据,该怎么写?我们可以是使用 awk 命令来实现
2023-11-25
下一篇 
如何通过命令行重启电脑 如何通过命令行重启电脑
对于Windows系统,你可以使用以下命令来重启电脑: 对于Linux系统,你可以使用以下命令来重启电脑: