LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
置顶的主题 精华主题  
主题工具
旧 05-07-03, 16:00 第 31 帖
benu
 
benu 的头像
 
 
注册会员  
  注册日期: Jun 2003
  我的住址: 成都
  帖子: 220
  精华: 0
 

看了楼主的解释,弄清了一些问题,可是还有些问题不太清楚。
就拿下面这个例子来说吧:
引用:
$ if [ "foo" = "bar" ]; then echo equals; else echo not equals; fi
上面命令行运行的结果是打印 not equals ,这没问题
可是,我如果先定义
引用:
$ A=fi
然后在将第一个命令行改为如下方式:
引用:
$ if [ "foo" = "bar" ]; then echo equals; else echo not equals; $A
运行结果是出现>提示符,我输入fi后回程,出现如下结果
引用:
> fi
not equals
bash: fi: command not found
能解释一下为什么$A没有被替换为fi 吗?
  benu 当前离线   回复时引用此帖
旧 05-07-10, 11:39 第 32 帖
︶ㄣ喃喃
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 4
  精华: 0
 

顶````GOOD
  ︶ㄣ喃喃 当前离线   回复时引用此帖
旧 05-08-15, 05:12 第 33 帖
yongjian
 
yongjian 的头像
 
 
★版☆主★  
  注册日期: May 2003
  我的住址: Linux
  帖子: 2,576
  精华: 9
 

引用:
作者: benu
看了楼主的解释,弄清了一些问题,可是还有些问题不太清楚。
就拿下面这个例子来说吧:

上面命令行运行的结果是打印 not equals ,这没问题
可是,我如果先定义

然后在将第一个命令行改为如下方式:

运行结果是出现>提示符,我输入fi后回程,出现如下结果


能解释一下为什么$A没有被替换为fi 吗?
关键字查找在变量替换之前,所以当shell执行你的命令时,首先是看有没有fi这个关键字。那时还没有做变量替换呢。所以会出现>的错误。当你输入了fi后,命令执行,然后又执行下一个命令$A,而$A替换后是fi,当shell再执行fi时有报错,因为没有fi这个命令。







__________________
15" C2D MBP.
有简单的,不用复杂的!看到复杂的,尽量简单化!
Unix/Linux Philosophy: Be small! Be concentrated! One program does one thing and do it perfectly!
∞ years - 宇宙中最后的物质 Proton heat death. 之后,宇宙将以纯能量的形式永远存在。。。一切皆空
  yongjian 当前离线   回复时引用此帖
旧 05-08-15, 06:36 第 34 帖
yongjian
 
yongjian 的头像
 
 
★版☆主★  
  注册日期: May 2003
  我的住址: Linux
  帖子: 2,576
  精华: 9
 

对教主的原帖想做一下讨论。例子:
代码:
echo "\"\\\""
这个命令的运行结果是
代码:
"\"
.但在原帖里显示当遇到""的时候,shell只执行6->8步,可是这6到8的步骤中没有一个是对特殊字符进行转义的,都是变量,命令或运算的替换的。所以我认为在6到8的步骤中必须还有一个是检测转义。这样的这个命令就能解试了:echo命令告诉shell对它的参数进行打印操作,shell接到的参数后,对其进行6-8步的检测,同时因为是双引,所以还有进行转义。因为在双引中没有任何的替换,所以运行了转义后shell打进出了结果 。
  yongjian 当前离线   回复时引用此帖
旧 05-09-28, 08:20 第 35 帖
sdccf
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 35
  精华: 0
 

太好了.







__________________
Linux学习资料
http://unix-cd.com/unixcd12/special_view.asp?spid=3
  sdccf 当前离线   回复时引用此帖
旧 05-12-13, 15:59 第 36 帖
jp2005
 
 
 
注册会员  
  注册日期: Dec 2005
  帖子: 1
  精华: 0
 

顶了,好好学习!
  jp2005 当前离线   回复时引用此帖
旧 06-01-11, 21:34 第 37 帖
Freesnake
 
Freesnake 的头像
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 1,798
  精华: 2
 

我看的都晕了……







__________________
《蜀山剑侠传》最高……
  Freesnake 当前离线   回复时引用此帖
旧 06-01-19, 12:51 第 38 帖
jiazhengw
 
jiazhengw 的头像
 
 
注册会员  
  注册日期: Dec 2003
  我的住址: 安徽安庆
  帖子: 103
  精华: 1
 

支持34楼的yongjian兄的说法,应将6-8步中转义加上去!
另外,第2步和第3步是不是要倒过来?因为如果按下面说明的那样定义一个关键字别名,比如:alias do=pwd,如果按图中走的话,是会出错的,而如果将检查别名放在第一步,就对了,而且shell的命令处理顺序也是先别名再关键字的.请大家参考.







__________________
I love linux

我的机子是PIII800,128M,15"彩显,RedHat linux 9

此帖于 06-01-19 14:23 被 jiazhengw 编辑.
  jiazhengw 当前离线   回复时引用此帖
旧 06-05-07, 11:58 第 39 帖
gregorian
 
gregorian 的头像
 
 
注册会员  
  注册日期: Jun 2004
  我的住址: 上海
  帖子: 221
  精华: 0
 

看的有点晕,多少对这个有点了解了







__________________
----------------------------------------------------------------------------

学习Linux、使用Linux、钻研Linux 提高自己Linux的水平

----------------------------------------------------------------------------
  gregorian 当前离线   回复时引用此帖
旧 06-05-22, 13:43 第 40 帖
greatbiz
 
greatbiz 的头像
 
 
注册会员  
  注册日期: Feb 2006
  帖子: 4
  精华: 0
 

关于 //////////// 的问题
在2.6
中,用/来分割目录
使用while循环实现的
类似如下
while(ch=='/')ch=next_char







__________________
I just don`t know!
  greatbiz 当前离线   回复时引用此帖
旧 06-10-01, 03:13 第 41 帖
cugedu 帅哥
 
cugedu 的头像
 
 
注册会员  
  注册日期: Aug 2006
  帖子: 4
  精华: 0
 

引用:
作者: r2007
代码:
r2007@www r2007 $ echo "\\" \ r2007@www r2007 $ a=`echo "\\"` -bash: command substitution: line 1: unexpected EOF while looking for matching `"' -bash: command substitution: line 2: syntax error: unexpected end of file r2007@www r2007 $
为什么a=`echo "\\"`提示错误,而echo "\\" 可以正常显示?
转义是在哪一步进行? 命令替换是否又进行一遍命令行处理?
谁能分析一下bash是如何对a=`echo "\\"` 这句进行扫描处理的,到哪一步出错停止的?
望通晓者告之,谢谢!

1.
$a=$(echo '\\')
$echo $a
\\
2.
$a=$(echo "\\")
$echo $a
\
3.
$a=`echo '\\'`
$echo $a
\
都用了命令替换而输出的结果不相同,究竟是转义在命令替换之前还是之后,还是$() ``2个替换命令导致输出的结果不一致?
  cugedu 当前离线   回复时引用此帖
旧 06-12-12, 11:37 第 42 帖
cguang
 
cguang 的头像
 
 
注册会员  
  注册日期: Dec 2006
  帖子: 43
  精华: 0
 

好!正在学习中.....
  cguang 当前离线   回复时引用此帖
旧 07-01-06, 00:50 第 43 帖
lichengshuang 帅哥
 
lichengshuang 的头像
 
 
注册会员  
  注册日期: Apr 2006
  帖子: 67
  精华: 0
 

type -all pwd







__________________
asher
  lichengshuang 当前离线   回复时引用此帖
旧 07-11-08, 23:02 第 44 帖
cosechy
 
 
 
注册会员  
  注册日期: Nov 2007
  帖子: 14
  精华: 0
 

``的问题
因为``里面的`和\之类的符号要转义,比如两层``就是` \`\` `
要想输出一个\的话,可以用a=`echo "\\\\"`
这里面的4个\被``和里面的subshell转义了两遍
当然'\\'也可以,相当于外面的'\'
  cosechy 当前离线   回复时引用此帖
旧 07-12-20, 11:20 第 45 帖
yueliangdao0608 帅哥
 
yueliangdao0608 的头像
 
 
注册会员  
  注册日期: Feb 2005
  我的住址: 深圳
  帖子: 18
  精华: 0
 

引用:
作者: home_king
已添加三个改变命令行处理的命令:
command, built, enable

请重温顶帖,谢谢。


enable 和 alias 不是一样的吗?







__________________
I'm a mysql dba in china.
More details about me just visit:
http://yueliangdao0608.cublog.cn
  yueliangdao0608 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:22


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org