记录一次shell里局部变量的问题
一:起因是这样的,自己今天面试被问到怎么读取某文件夹下所有的文件的每一行的数值的总和;其中文件中数值在每一行里的格式为num|,如33|,因此我第一想到的是通过cut -d\| f1 file来获取每个文件的以|为分割的第一列的值,
相当于最终能够将某文件的数据变成 33 44 55这样的形式;当时只答出用find/cut来实现,但没有电脑无法做进一步的测试;面试回来后就自己实现了这个问题,最终正确的脚本是:
a=;for file in $(find ./ -name "*");do [ -f $file ] &&for arg in $(cut -d\| -f1 $file);do ((a=$a+$arg));done;done;echo $a
这里遇到了一个很有趣的情况,就是当我对&&for....done;done的for...done加上()后a会变成第二个for内部的局部变量;因为一开始我怕&&后面不能完整执行一个for语句因此加了括号;
后面打印$a发现每次进入第二个for $a的初始值都是0;后来以为是a的作用域的原因又通过export a;也没用;
最后报着侥幸的心态把()删了就正确得到了自己想要的结果;
结论:单()内部的变量会是局部变量而不会用外部变量,网上查到的是()内的语句实际上是开启了一个子shell来执行,因此里面的变量不会用到当前shell(bash)的变量,而()内声明的变量也不会被()所获得;
这里找到了更好的做法,用awk替代cut方法是:(注意$NF表示最后一列,而$(NF-1)表示倒数第二列
awk -F ' ' '{print $2}' bbb.txt | awk '{sum+=$1}END{print sum}'
表示先以空格作为分隔符得到第二列(全是数值假设),然后再次awk这个$1就表示整行的意思,然后这个命令以END作为分割,前面是要先执行的操作,后面是执行完后的接下的操作;
如果该列不是数值则结果为0
而如果想拼接字符串则将上面的sum+=$1改为sum=sum$1就是一个拼接操作;
记录一次shell里局部变量的问题的更多相关文章
- shell编程学习笔记(三):Shell中局部变量的使用
现在我们看一下Shell中局部变量的使用 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script03.sh 开始编写script0 ...
- shell脚本学习之Bash shell 里各种括号的用法
今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括 ...
- Bash Shell 里的各种括号
天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括号 ...
- 为QNetworkAccessManager添加超时提醒(自己记录一段时间里的下载字节数,用定时器去定期检测,从而判断是否超时)
在做更新,在测试异常的时候,在下载过程中,发现如果直接系统禁用了网络,会报错误,可以捕获.但是如果是第三方软件限制程序联网,问题来了. 程序会一直在那里等待,没有异常,也不发送QNetworkAcce ...
- Shell里的特殊符号
Shell里的特殊符号: (1)单引号: 由单引号括起来的符号都作为普通字符处理,他们都失去了特殊意义. (2)双引号: 除美元符号($).倒引号.反斜线(\)仍保留特殊含义外,其余符号都作为普通字符 ...
- 刷题记录:[De1ctf] shell shell shell
目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...
- SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ?
SAP MM 自定义条件类型出现在采购信息记录的'条件'界面里 ? 我在SAP系统里复制某个标准的采购条件类型,创建了一个新的自定义条件类型ZC05,并将其分配采购定价过程RM0000. 结果却出现一 ...
- 千万不要往 Shell 里粘贴命令!
对于用惯了 IDE 的程序员来说,在终端里敲命令可能没那么顺手,也记不住那么多复杂的命令.比较偷懒的做法就是网上搜相关的命令,复制到剪贴板往命令行窗口里一贴,完事! 但是这么做有很大的风险,为什么呢? ...
- Shell 里空语句怎么写 - 半角的冒号
Python 里的空语句写作pass for x in range(10): pass Shell 里的空语句写作 : #!/bin/bash for x in {1..10} do #echo $x ...
随机推荐
- objective c, property, copy
@property (copy) nsmutablearray *array -copy, as implemented by mutable Cocoa classes, always return ...
- 一个取消事件的简单js例子(事件冒泡与取消默认行为)
先上代码: <div id='outer' onclick='alert("我是outer")'> <div id="middle" oncl ...
- js原生实现 无缝滚动图片
<!-- 无缝滚动图片开始 --> <div id=demopic style="OVERFLOW: hidden; WIDTH: 100%; COLOR: #fff; H ...
- 深入MySQL用户自定义变量
一.到底MySQL的变量分哪几类? MySQL变量一共分为两大类:用户自定义变量和系统变量.如下: 用户自定义变量 局部变量 会话变量 系统变量 会话变量 全局变量 本文涉及的内容为用户自定义会话变量 ...
- sql重复数据只取一条记录
1.SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法: SEL ...
- golang 打印变量类型
fmt.Println("type:", reflect.TypeOf(err.Error()))
- 了解大数据的特点、来源与数据呈现方式以及用Python写Mad Libs游戏
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2620. 1.浏览2019春节各种大数据分析报告,例如: 这世间,再 ...
- Segments(叉积)
Segments http://poj.org/problem?id=3304 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
- SVN版本冲突问题
--------------------siwuxie095 SVN 版本冲突问题 如:Jack 和 Mary 从仓库中将项目下载到本地,然后 Jack 修改了 项目中的一个文件,并上传到仓库中,之后 ...
- ios 处理WKContentView的crash
http://www.jianshu.com/p/7ef5814a871b 解决WKContentView没有isSecureTextEntry方法造成的crash 程序中有web页面,使用W ...