关于反引号或$()代换操作,在此请教...

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

关于反引号或$()代换操作,在此请教...

#1

帖子 潇洒走一回 » 2009-10-03 21:58

请先看我的操作:
<一>

代码: 全选

cd ~
ls > tmp/'test(ls)'
生成的文件test(ls)内容如下:
bin
date
Desktop
documents
Downloads
examples.desktop
exercise
glade-2.12.2
keep-learning
music
newcomer
Notes
photos
programs
projects
python-scripts
shell-scripts
tmp
公共的
视频
图片
文档
音乐
<二>

代码: 全选

cd ~
echo $(ls) > tmp/'test($)' # $(ls)写成`ls`效果相同
生成的文件test($)内容如下:
bin date Desktop documents Downloads examples.desktop exercise glade-2.12.2 keep-learning music newcomer Notes photos programs projects python-scripts shell-scripts tmp 公共的 视频 图片 文档 音乐
看出区别了吗?
为什么把ls命令的输出结果经过$()或``代换后本来是多行内容却变成了一行内容呢?
希望有人解释以下,谢谢!!!
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 关于反引号或$()代换操作,在此请教...

#2

帖子 潇洒走一回 » 2009-10-03 22:05

这样做有什么用意吗?
头像
darkfish
帖子: 90
注册时间: 2009-09-18 10:03
来自: 北京
联系:

Re: 关于反引号或$()代换操作,在此请教...

#3

帖子 darkfish » 2009-10-03 22:44

你要一样可以用

代码: 全选

echo "$(ls)"
头像
darkfish
帖子: 90
注册时间: 2009-09-18 10:03
来自: 北京
联系:

Re: 关于反引号或$()代换操作,在此请教...

#4

帖子 darkfish » 2009-10-03 22:47

同样的
如果

代码: 全选

x='a b   c    d'
echo $x         #是a b c d
echo "$x"      #是a b   c    d
任何一本有关shell编程的书都有这个解释
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 关于反引号或$()代换操作,在此请教...

#5

帖子 潇洒走一回 » 2009-10-03 23:03

darkfish 写了:你要一样可以用

代码: 全选

echo "$(ls)"
shell的语法也太诡异了吧?
真郁闷
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 关于反引号或$()代换操作,在此请教...

#6

帖子 潇洒走一回 » 2009-10-03 23:25

你们看看我这样理解对不对?
其实$var这种形式也是一种代换语法, 它代换出一个变量的内容, 并把这个内容作为其它命令的一部分(或参数),所以:

代码: 全选

当a='a b     c'时
使用$a实际相当于在命令中插入了a b     c这一串东东:
echo $a 实际等于 echo a b     c,就是echo依次作用在这三个字符上
echo "$a" 实际等价于 echo "a b     c",就是echo直接作用于"a b     c"这个字符串上
上次由 潇洒走一回 在 2009-10-03 23:29,总共编辑 1 次。
头像
Jarson
帖子: 2371
注册时间: 2008-07-21 9:44
来自: 深圳
联系:

Re: 关于反引号或$()代换操作,在此请教...

#7

帖子 Jarson » 2009-10-03 23:28

呵呵,在shell中变量的引用(引号括住)与变量的替换(没有引号括住)还是有些许区别的。
俺也正在学习shell中 :em11
头像
Jarson
帖子: 2371
注册时间: 2008-07-21 9:44
来自: 深圳
联系:

Re: 关于反引号或$()代换操作,在此请教...

#8

帖子 Jarson » 2009-10-03 23:29

潇洒走一回 写了:你们看看我这样理解对不对?
其实$var这种形式也是一种代换语法, 它代换出一个变量的内容, 并把这个内容作为其它命令的一部分(或参数),所以:

当a='a b c'时
使用$a实际相当于在命令中插入了a b c这一串东东:
echo $a 实际等于 echo a b c,就是echo依次作用在这三个字符上
echo "$a" 实际等价于 echo "a b c",就是echo直接作用于"a b c"这个字符串上
大概也就是这意思了 :em05
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 关于反引号或$()代换操作,在此请教...

#9

帖子 潇洒走一回 » 2009-10-03 23:38

为了验证我的猜测,我刚刚做了一个奇妙的试验:
shell下输入:

代码: 全选

PART=' -sh'
ls$PART #相当于ls -sh,注意PART变量以一个空格开始.
输出:
总用量 21K
0 bin 512 exercise 0 photos 0 公共的
0 date 1.0K glade-2.12.2 0 programs 0 视频
0 Desktop 1.0K keep-learning 0 projects 0 图片
0 documents 0 music 512 python-scripts 0 文档
0 Downloads 0 newcomer 0 shell-scripts 14K 音乐
4.0K examples.desktop 0 Notes 0 tmp
回复