工作中想遍历文件中的每行,并且赋值给一个变量,使用下面写法,但是循环遍历后变量依然为空,值没有变化。如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20~/temp/201908/temp/temp$ cat temp.txt http://www.baidu.com http://www.jd.com http://www.huawei.com ~/temp/201908/temp/temp$ cat temp.sh #! /bin/bash file_path=temp.txt new_var='' cat ${file_path} | while read line do new_var="${new_var}${line};" echo ${line}_____ done echo "${new_var}+++++" ~/temp/201908/temp/temp$ source temp.sh http://www.baidu.com_____ http://www.jd.com_____ http://www.huawei.com_____ +++++
上面未赋值成功是因为使用了管道符,将值传给了while,使得while在子shell中执行,子shell中的变量等在循环外无效。
可以写为:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15~/temp/201908/temp/temp$ cat temp.sh #! /bin/bash file_path=temp.txt new_var='' while read line do new_var="${new_var}${line};" echo ${line}_____ done <<< "$(cat ${file_path})" echo "${new_var}+++++" ~/temp/201908/temp/temp$ source temp.sh http://www.baidu.com_____ http://www.jd.com_____ http://www.huawei.com_____ http://www.baidu.com;http://www.jd.com;http://www.huawei.com;+++++
或者:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16~/temp/201908/temp/temp$ cat temp.sh #! /bin/bash file_path=temp.txt new_var='' while read line do new_var="${new_var}${line};" echo ${line}_____ done < ${file_path} echo "${new_var}+++++" ~/temp/201908/temp/temp$ source temp.sh http://www.baidu.com_____ http://www.jd.com_____ http://www.huawei.com_____ http://www.baidu.com;http://www.jd.com;http://www.huawei.com;+++++
参考:https://www.cnblogs.com/f-ck-need-u/p/7431578.html
最后
以上就是完美秋天最近收集整理的关于shell while循环后变量的值未变化的全部内容,更多相关shell内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复