我是靠谱客的博主 完美秋天,这篇文章主要介绍shell while循环后变量的值未变化,现在分享给大家,希望可以做个参考。

 工作中想遍历文件中的每行,并且赋值给一个变量,使用下面写法,但是循环遍历后变量依然为空,值没有变化。如下:

复制代码
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(118)

评论列表共有 0 条评论

立即
投稿
返回
顶部