当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于双引号设置环境变量的疑问
帖子发表于 : 2010-06-27 2:30 

注册: 2008-09-17 21:06
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
今天看shell教程的时候,介绍到PS1这个主提示符变量
我将其重新赋值:
代码:
dirk@dirk-desktop:~/develop$ PS1="`who am i | cut -d" " -f 1`@${PWD}:"
dirk@/home/dirk/develop:cd ..
dirk@/home/dirk/develop:echo $PWD
/home/dirk
dirk@/home/dirk/develop:

可以看出,返回上级目录后,主提示符没有随着PWD而改变
将双引号换成单引号后:
代码:
dirk@dirk-desktop:~/develop$ PS1='`who am i | cut -d" " -f1`@${PWD}:'
dirk@/home/dirk/develop:cd ..
dirk@/home/dirk:echo $PWD
/home/dirk
dirk@/home/dirk:


我只知道单引号与双引号的区别就是双引号不保护以下三个特殊字符:
$ , ` , \
其余书上不详,两个命令为什么出现上述区别就真不知道何故了,是因为SHELL在每条命令后不对每个变量双引号里面的内容重新赋值么?

只能期待高手帮忙~ :em06


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于双引号设置环境变量的疑问
帖子发表于 : 2010-06-28 22:07 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
如果你只是想设置一个漂亮的提示符,那么没必要去纠缠这个例子了。在 bash 中,有更方便的方法达到同样的目的,看看 man 就可以了。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于双引号设置环境变量的疑问
帖子发表于 : 2010-06-29 0:10 

注册: 2008-09-17 21:06
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
aerofox 写道:
如果你只是想设置一个漂亮的提示符,那么没必要去纠缠这个例子了。在 bash 中,有更方便的方法达到同样的目的,看看 man 就可以了。

谢谢你。
如果我要设置一个我想要的提示符,已经可以用单引号达到这个目的了
我希望知道单引号和双引号在这个例子里面的区别。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 关于双引号设置环境变量的疑问
帖子发表于 : 2010-06-29 6:15 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
在这个例子中是这样的:
双引号中 $ 会被扩展,也就是 ${PWD} 会被当前路径所替代。所以如果你在 /home/dirk/develop 这个目录下执行
代码:
PS1="${PWD}"

跟执行
代码:
PS1="/home/dirk/develop"

是完全等价的,所以提示符不会变了。
而单引号中 $ 只当作普通字符。所以使用单引号时 PS1 的值中带有 ${PWD} 这样的原原本本的文本。Shell 在送出提示符时,这个文本被扩展为当前路径,这就是显示提示符时的当前路径。
你的后一个例子中,不仅把 $ 放到了单引号中,而且把 `` (重音符)放到了单引号中,后者你在提示符上看不出变化,但实际上是有差别的。在第一个例子中,who 和 cut 只在你设置 PS1 时执行一次,在第二个例子中,每次显示提示符前都执行 who 和 cut,当机器很差时,会感觉第二个例子中的提示符出得慢。还可以从进程号的变化看出差别。
连续执行
代码:
echo &

你会发现使用第一个例子的提示符时,后台进程号基本上是按 1 递增的,使用第二个例子的提示符时,基本上是按 3 递增的。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 关于双引号设置环境变量的疑问
帖子发表于 : 2010-07-01 15:29 

注册: 2008-09-17 21:06
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
我明白了,谢谢aerofox的提醒~ :em11
解释得很清楚的说~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 关于双引号设置环境变量的疑问
帖子发表于 : 2010-07-01 15:53 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
● echo $PS1
\[\e[31;40m\]\D{%Y-%m-%d %H:%M:%S %a}\[\e[32;40m\] \w \[\e[m\]\n●

● echo $PS4
+{$LINENO:${FUNCNAME[0]}}


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译