您的位置:首页 > 运维架构 > Shell

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的""语法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: