免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7137 | 回复: 8
打印 上一主题 下一主题

echo变量时遇到的问题,求解。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-01 17:17 |只看该作者 |倒序浏览
系统是aix-unix。

-bash-3.00$ lines=a'
> 'b
-bash-3.00$ echo $lines
a b

单引号-回车-单引号,为什么会产生一个空格?单引号不是应该把回车的效果给无视了吗?那么shell究竟是如何处理的?

而且多个回车不会有多个空格,如下:

-bash-3.00$ lines=a'
>
>
>
> b
>
>
> c
>
>
>
>
> d
>
> e
> 'f
-bash-3.00$ echo $lines
a b c d e f

请高手指教,多谢!

[ 本帖最后由 wikodo 于 2009-12-3 16:26 编辑 ]

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
2 [报告]
发表于 2009-12-01 17:34 |只看该作者
echo "$lines"

论坛徽章:
0
3 [报告]
发表于 2009-12-01 20:20 |只看该作者
原帖由 liaosnet 于 2009-12-1 17:34 发表
echo "$lines"


请问你知不知道我的那个现象的原理呢?或者说shell是如何处理的?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
4 [报告]
发表于 2009-12-01 20:30 |只看该作者
word splitting

论坛徽章:
0
5 [报告]
发表于 2009-12-01 21:22 |只看该作者

回复 #4 blackold 的帖子

还是现象
LZ要原理

论坛徽章:
0
6 [报告]
发表于 2009-12-25 17:10 |只看该作者

回复 #1 wikodo 的帖子

原帖由 admirer 于 2003-12-9 23:15 发表
关于{}和()

1.{} 的用法
确认你有一个叫file和一个叫file1的变量。能够使用以下的语句给它们赋值:
$ file=this
$ file1=that
$echo $fileand$file1 寻找变量fileand,file1
sh: fileand: parameter not set
$ echo ${file} and $file1 寻找变量file,file1
thisandthat
花括号被用来区分变量名和周围的文本
2.()的用法
命令替代
语法:
$(command)
例子:
$pwd
/home/user2
$ curdir=$(pwd)
$ echo $curdir
/home/user2
$ cd /tmp
$ pwd
$ cd $curdir
$ pwd
/home/user2
命令替代用来替代一个命令和命令行输出。命令替代的标准语法,也是POSIX鼓励的一种语法是:$(command).
命令替代让你捕获一个命令的输出,用它作为另一个命令的参数,或是赋值给一个变量。象在变量替代中一样,命令替代的执行是在命令行开始之前完成的。当命令行输出包含回车换行,它们会被空格代替。
同变量替代相似,命令替代使用一个美元符号之后的用括号包围的一个命令。
所有有效的shell脚本都可以加入命令替代。Shell 扫描每行脚本,执行它发现的开始于一个开括号,结束与于一个闭括号的命令。
命令替代的另外一种格式是用反引号来环绕一个命令象:
`command`
它和$(command) 是等价的,并且这是Bourne Shell认证的唯一的形式。`command`形式可以用在POSIX的脚本中和Bourne Shell的脚本中。
命令替代通常是在将一个命令的输出赋给一个变量或以后的处理时使用。通常pwd命令将它的输出送到你的屏幕。当你执行以下的赋值语句:
$ curdir=$(pwd) 或 $ curdir=`pwd`
pwd 的输出被赋给变量 curdir。


前段时间浏览shell十三问的时候看到这个回复,没什么感觉,今天翻开笔记再看的时候,忽然感觉我这个问题跟这个回复中的类似哦,不知道是不是这个样子,shell把回车换行替换成了空格。

“象在变量替代中一样,命令替代的执行是在命令行开始之前完成的。当命令行输出包含回车换行,它们会被空格代替。”

[ 本帖最后由 wikodo 于 2009-12-25 17:12 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [报告]
发表于 2009-12-25 17:23 |只看该作者

回复 #5 haimming 的帖子

word splitting

就是原理啊

论坛徽章:
0
8 [报告]
发表于 2009-12-26 21:23 |只看该作者
$line先会展开,展开后空格,回车都是Shell的分隔符没区别,然后Shell把列表元素传给echo。
echo只负责输出各个元素,并在元素间加上一个空格。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2009-12-26 21:36 |只看该作者

回复 #5 haimming 的帖子

先看马列吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP