SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
-
- 帖子: 4
- 注册时间: 2011-06-30 10:32
SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
针对名字中带有空格的文件夹
想把如下路径/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 没有那个文件或目录.
为什么不行?
想把如下路径/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 没有那个文件或目录.
为什么不行?
- ljj_jjl2008
- 论坛版主
- 帖子: 14255
- 注册时间: 2007-09-16 8:29
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
用了双引号,就不用转义了吧?
闻到死太贵, 麦克价更高。 有了笨笨兔, 二者皆可抛。
+ 我的六轮折腾
+ 折腾6轮的结果(对40余种WM的测试和分析,多种DE和WM并存的方案)
+ 折腾的中间成果:可以独立运行的一个Wharf(图标化的启动菜单)
+ 强烈推荐----折腾的终极成果:一个自己开发的DE环境
+ 签名空闲链接位置招租
+ 我的六轮折腾
+ 折腾6轮的结果(对40余种WM的测试和分析,多种DE和WM并存的方案)
+ 折腾的中间成果:可以独立运行的一个Wharf(图标化的启动菜单)
+ 强烈推荐----折腾的终极成果:一个自己开发的DE环境
+ 签名空闲链接位置招租
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
解决办法:
需要原理吗?
原理涉及到bash的解释和运行规则,很复杂,想听吗?
代码: 全选
work="/home/me/Ubuntu One"
cd "$work"
原理涉及到bash的解释和运行规则,很复杂,想听吗?
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
-
- 帖子: 4
- 注册时间: 2011-06-30 10:32
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
想听,请讲!lexdene 写了:解决办法:需要原理吗?代码: 全选
work="/home/me/Ubuntu One" cd "$work"
原理涉及到bash的解释和运行规则,很复杂,想听吗?
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
我晚上下班以后就不在线了。
刚刚看见。
简单说一下。
bash在执行一条命令的时候,会先对命令进程展开,最后再执行。
第一个:
那么首先,由于双引号的影响,反斜线"\"不发生转义,$work变量的内容就是"/home/me/Ubuntu\ One"。
然后第二句的时候$work变量进行展开,变成了:
cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu\这个目录。然后第二个参数One被忽略。
之后提示,找不到/home/me/Ubuntu\目录。
第二个
由于反斜线"\"转义,$work变量的内容是"/home/me/Ubuntu One"。
然后第二句的时候$work变量进行展开,变成了:
cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu这个目录。然后第二个参数One被忽略。
之后提示,找不到/home/me/Ubuntu目录。
插入一句:以下两句等价:
造成的结果都是$work变量的内容是"/home/me/Ubuntu One"。
第三个
双引号只影响转义,不影响变量的展开,所以第二句会变成:
由于双引号的影响,"/home/me/Ubuntu One"会被当成一个参数传给cd命令。
所以能够执行成功。
再插一句,双引号、单引号的区别,我认为你能看懂:
我的能力就到此为止了,再多的我也不知道了。
如果你想深入了解bash的展开规则,可以上百度、google搜索一下。
这里给个链接,希望对你有帮助。
http://hi.baidu.com/biglazybug/blog/ite ... 9d769.html
刚刚看见。
简单说一下。
bash在执行一条命令的时候,会先对命令进程展开,最后再执行。
第一个:
代码: 全选
work="/home/me/Ubuntu\ One"
cd $work
然后第二句的时候$work变量进行展开,变成了:
代码: 全选
cd /home/me/Ubuntu\ One
之后提示,找不到/home/me/Ubuntu\目录。
第二个
代码: 全选
work=/home/me/Ubuntu\ One
cd $work
然后第二句的时候$work变量进行展开,变成了:
代码: 全选
cd /home/me/Ubuntu One
之后提示,找不到/home/me/Ubuntu目录。
插入一句:以下两句等价:
代码: 全选
work=/home/me/Ubuntu\ One
work="/home/me/Ubuntu One"
第三个
代码: 全选
work="/home/me/Ubuntu One"
cd "$work"
代码: 全选
cd "/home/me/Ubuntu One"
所以能够执行成功。
再插一句,双引号、单引号的区别,我认为你能看懂:
代码: 全选
$ [email protected]
$ echo $a
[email protected]
$ b="$a"
$ echo $b
[email protected]
$ c='$a'
$ echo $c
$a
如果你想深入了解bash的展开规则,可以上百度、google搜索一下。
这里给个链接,希望对你有帮助。
http://hi.baidu.com/biglazybug/blog/ite ... 9d769.html
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- link_01
- 帖子: 1024
- 注册时间: 2008-11-05 13:24
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
很多环境,单引号不替换变量。
笔记
-------------------------------------
http://blog.163.com/wqt_1101
-------------------------------------
http://blog.163.com/wqt_1101
-
- 帖子: 4
- 注册时间: 2011-06-30 10:32
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
学习了,谢谢!lexdene 写了:我晚上下班以后就不在线了。
刚刚看见。
简单说一下。
bash在执行一条命令的时候,会先对命令进程展开,最后再执行。
第一个:那么首先,由于双引号的影响,反斜线"\"不发生转义,$work变量的内容就是"/home/me/Ubuntu\ One"。代码: 全选
work="/home/me/Ubuntu\ One" cd $work
然后第二句的时候$work变量进行展开,变成了:cd命令只接收第一个参数。就变成了进入/home/me/Ubuntu\这个目录。然后第二个参数One被忽略。代码: 全选
cd /home/me/Ubuntu\ One
之后提示,找不到/home/me/Ubuntu\目录......
-
- 帖子: 4
- 注册时间: 2011-06-30 10:32
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
那么,什么环境下单引号会替换变量?link_01 写了:很多环境,单引号不替换变量。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- tenzu
- 论坛版主
- 帖子: 36924
- 注册时间: 2008-11-21 20:26
-
- 帖子: 233
- 注册时间: 2007-11-17 19:51
- link_01
- 帖子: 1024
- 注册时间: 2008-11-05 13:24
Re: SHELL赋值给变量时名字中带有空格的文件夹中的空格无法用转义符吗
其实我的意思是有的地方也许会把单引号当作字符串的一部分,
关于单引号双引号是否转义,基本上已经是很通用的原则了,不知道这个词用的恰当不。
关于单引号双引号是否转义,基本上已经是很通用的原则了,不知道这个词用的恰当不。
笔记
-------------------------------------
http://blog.163.com/wqt_1101
-------------------------------------
http://blog.163.com/wqt_1101