Shell变量while循环内改变无法传递到循环外
来源:互联网 发布:比价软件app 编辑:程序博客网 时间:2024/06/16 00:41
今天刷Leecode(192 Word frequency)时,遇到一个shell语法问题,记录下来。首先将题目描述和代码呈上
当启用管道时,会生成一个subshell,while循环的代码在subshell中执行,那么变量map也是在subshell中被修改,
while循环结束后,回到主shell,map没有被修改,也就是说,两个map不是同一个map,while中修改的map是外层map的副本
修改代码,将读取文件的格式改成L36,程序运行正常
#!/bin/bash# Write a bash script to calculate the frequency of each word in a text file words.txt.## For simplicity sake, you may assume:# words.txt contains only lowercase characters and space ' ' characters.# Each word must consist of lowercase characters only.# Words are separated by one or more whitespace characters.## For example, assume that words.txt has the following content:# the day is sunny the the# the sunny is is## Your script should output the following, sorted by descending frequency:# the 4# is 3# sunny 2# day 1# define a mapdeclare -A map=()# iterator lines in file#cat words.txt | while read linewhile read linedo for word in $line do echo $word if [ -z ${map[$word]} ];then map[$word]=1 else let map[$word]++ fi donedone < words.txtfor key in ${!map[@]}do echo $key ${map[$key]}done题目的意思是统计一个文件中单词重复的次数,开始写法如L24,while循环结束后,map依然为空,后来才知道是使用了管道的缘故
当启用管道时,会生成一个subshell,while循环的代码在subshell中执行,那么变量map也是在subshell中被修改,
while循环结束后,回到主shell,map没有被修改,也就是说,两个map不是同一个map,while中修改的map是外层map的副本
修改代码,将读取文件的格式改成L36,程序运行正常
0 0
- Shell变量while循环内改变无法传递到循环外
- Bash shell,while 循环中的变量无法保存问题
- shell 循环变量传递问题
- shell while循环监控
- shell脚本----while循环
- shell脚本--while循环
- shell while循环
- shell while循环问题
- Shell中的while循环
- 十七、Shell while循环
- Shell while循环
- Shell while循环
- Shell while循环
- Shell while循环
- shell while循环
- shell while循环
- Shell中的while循环
- Shell while循环
- 链接收藏
- Java基础——switch的用法及注意事项
- React Native 处理TextInput在输入后,点击布局空白处软件盘能弹出和收回。
- Mysql Workbench 画E-R图!
- kddcup99
- Shell变量while循环内改变无法传递到循环外
- java 基础 冒泡排序
- Oracle数据库
- Java环境配置及javac无法正常使用的一种特殊情况
- linux踢掉用户
- stl---vector详解
- Linux服务器宕机案例
- Apache中 RewriteRule 规则参数介绍
- c++实验3-个人所得税计算器