分页: 1 / 1
SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-06 16:54
由 chirive
针对名字中带有空格的文件夹
想把如下路径/home/me/Ubuntu One,赋给变量work.
于是有:work="/home/me/Ubuntu\ One"
结果当 cd $work时,显示:bash: cd: /home/me/Ubuntu\ 没有那个文件或目录
改了一下:work=/home/me/Ubuntu\ One(即去掉了双引号)
结果当cd $work时,显示bash: cd: /home/me/Ubuntu 没有那个文件或目录.
为什么不行?
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-06 16:58
由 ljj_jjl2008
用了双引号,就不用转义了吧?
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-06 17:00
由 lexdene
解决办法:
代码: 全选
work="/home/me/Ubuntu One"
cd "$work"
需要原理吗?
原理涉及到bash的解释和运行规则,很复杂,想听吗?
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-06 18:18
由 chirive
lexdene 写了:解决办法:
代码: 全选
work="/home/me/Ubuntu One"
cd "$work"
需要原理吗?
原理涉及到bash的解释和运行规则,很复杂,想听吗?
想听,请讲!
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-07 8:44
由 lexdene
我晚上下班以后就不在线了。
刚刚看见。
简单说一下。
bash在执行一条命令的时候,会先对命令进程展开,最后再执行。
第一个:
代码: 全选
work="/home/me/Ubuntu\ One"
cd $work
那么首先,由于双引号的影响,反斜线"\"不发生转义,$work变量的内容就是"/home/me/Ubuntu\ One"。
然后第二句的时候$work变量进行展开,变成了:
代码: 全选
cd /home/me/Ubuntu\ One
cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu\这个目录。然后第二个参数One被忽略。
之后提示,找不到/home/me/Ubuntu\目录。
第二个
代码: 全选
work=/home/me/Ubuntu\ One
cd $work
由于反斜线"\"转义,$work变量的内容是"/home/me/Ubuntu One"。
然后第二句的时候$work变量进行展开,变成了:
代码: 全选
cd /home/me/Ubuntu One
cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu这个目录。然后第二个参数One被忽略。
之后提示,找不到/home/me/Ubuntu目录。
插入一句:以下两句等价:
代码: 全选
work=/home/me/Ubuntu\ One
work="/home/me/Ubuntu One"
造成的结果都是$work变量的内容是"/home/me/Ubuntu One"。
第三个
代码: 全选
work="/home/me/Ubuntu One"
cd "$work"
双引号只影响转义,不影响变量的展开,所以第二句会变成:
代码: 全选
cd "/home/me/Ubuntu One"
由于双引号的影响,"/home/me/Ubuntu One"会被当成一个参数传给cd命令。
所以能够执行成功。
再插一句,双引号、单引号的区别,我认为你能看懂:
我的能力就到此为止了,再多的我也不知道了。
如果你想深入了解bash的展开规则,可以上百度、google搜索一下。
这里给个链接,希望对你有帮助。
http://hi.baidu.com/biglazybug/blog/ite ... 9d769.html
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-07 8:48
由 link_01
很多环境,单引号不替换变量。
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 8:12
由 chirive
lexdene 写了:我晚上下班以后就不在线了。
刚刚看见。
简单说一下。
bash在执行一条命令的时候,会先对命令进程展开,最后再执行。
第一个:
代码: 全选
work="/home/me/Ubuntu\ One"
cd $work
那么首先,由于双引号的影响,反斜线"\"不发生转义,$work变量的内容就是"/home/me/Ubuntu\ One"。
然后第二句的时候$work变量进行展开,变成了:
代码: 全选
cd /home/me/Ubuntu\ One
cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu\这个目录。然后第二个参数One被忽略。
之后提示,找不到/home/me/Ubuntu\目录......
学习了,谢谢!
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 8:19
由 chirive
link_01 写了:很多环境,单引号不替换变量。
那么,什么环境下单引号会替换变量?
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 9:06
由 eexpress
哪里说得出那么多。很简单的规则而已。
搞传销的吧。
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 9:32
由 tenzu
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 9:56
由 chrwhy
5楼正解, 还有详细的解释
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
发表于 : 2011-09-08 9:58
由 link_01
其实我的意思是有的地方也许会把单引号当作字符串的一部分,
关于单引号双引号是否转义,基本上已经是很通用的原则了,不知道这个词用的恰当不。