shell 脚本中将输出内容赋值给一个变量时的换行问题
2015-12-08 20:37
691 查看
在搜索"shell 变量 换行符"看到CSDN上有篇用如上标题的文章,里面的内容解决了我的问题.但是有些内容不准确,这里引出来.
原csdn blog地址点这里
原文的第一段落如下:
如题,将某命令的输出结果赋值给一个变量 a
如果使用 echo $a 输出变量,则变量中的 换行都会被忽略掉,所有内容输出到一行
而使用 echo "$a" 可正常输出变量中的换行
当我们要将命令的输出保存到一个变量,再对每一行遍历进行某些操作时不能使用
[html] view
plaincopy
for item in "$a";do
## do something
done
语法,这样取到的变量 item 不是$a 中的一行,而是以空格分隔的一个个字符串
实际上,echo $a是把变量$a里面的换行(符)[0x0a]替换成空格(符)[0x20]了;如果最末尾是一个换行(符),那么不用替换,如果最末尾不是一个换行(符),那就加上一个换行(符).用hexdump看一下就知道了.
a=1
echo $a|hexdump
echo "1"|hexdump
自己做个测试.
有个文件a.txt, 内容有两行
11 22
22 33
然后做
a=`cat a.txt`
for item in "$a";do
echo $item
echo "*"
done
得到结果:
11 22 22 33
*
====
另一种
a=`cat a.txt`
for item in "$a";do
echo "$item"
echo "*"
done
得到结果:
11 22
22 33
*
很明显,这样取到的变量 item就是整个$a!!!或则说"$a"就是一个字符串,而不是多个字符串!!!这就是shell的""语法
原csdn blog地址点这里
原文的第一段落如下:
如题,将某命令的输出结果赋值给一个变量 a
如果使用 echo $a 输出变量,则变量中的 换行都会被忽略掉,所有内容输出到一行
而使用 echo "$a" 可正常输出变量中的换行
当我们要将命令的输出保存到一个变量,再对每一行遍历进行某些操作时不能使用
[html] view
plaincopy
for item in "$a";do
## do something
done
语法,这样取到的变量 item 不是$a 中的一行,而是以空格分隔的一个个字符串
实际上,echo $a是把变量$a里面的换行(符)[0x0a]替换成空格(符)[0x20]了;如果最末尾是一个换行(符),那么不用替换,如果最末尾不是一个换行(符),那就加上一个换行(符).用hexdump看一下就知道了.
a=1
echo $a|hexdump
echo "1"|hexdump
自己做个测试.
有个文件a.txt, 内容有两行
11 22
22 33
然后做
a=`cat a.txt`
for item in "$a";do
echo $item
echo "*"
done
得到结果:
11 22 22 33
*
====
另一种
a=`cat a.txt`
for item in "$a";do
echo "$item"
echo "*"
done
得到结果:
11 22
22 33
*
很明显,这样取到的变量 item就是整个$a!!!或则说"$a"就是一个字符串,而不是多个字符串!!!这就是shell的""语法
相关文章推荐
- Linux学习笔记(十七、Shell概述)
- OpenSSH 仅用于端口转发(仅使用SSH隧道,禁止Shell)
- shell script
- shell中常用的特殊符号
- 虚拟机、Linux及Xshell问题汇总(最终方案)【慕课网笔记】
- linux在shell中获取时间
- Linux —— Shell编程之变量赋值和引用
- Ubuntu修改bash
- Shell调试
- Shell脚步之监控iostat数据
- shell 之 mysql批量杀sleep连接
- 数据库备份,远程执行SHELL脚本
- Linux Shell编程入门
- shell脚本常识
- sed学习备忘录
- 关于整形溢出(转载至CollShell)
- shell变量的使用
- shell脚本传参
- Linux学习笔记之shell学习(一)
- shell 脚本运行权限