如何将带有空格的路径存储到bash中的变量中

时间:2017-02-02 05:47:19

标签: bash quoting

我想将/c/users/me/dir name存储到变量中,以将其传递给cd系统调用。

输入时起作用:

$ cd '/c/users/me/dir name'

$ cd /c/users/me/dir\ name

但如果我存储它不起作用:

$ dirname="'/c/users/me/dir name'"
$ cd $dirname
$ bash: cd: /c/users/me/dir: No such file or directory

同样的结果:

$ dirname=('/c/users/me/dir name')

$ dirname=(/c/users/me/dir\ name)

哪种方式可以存储它?

2 个答案:

答案 0 :(得分:3)

使用空格对路径变量进行双引号,以保留它,

dirName="/c/users/me/dir name"
cd "$dirName"

实际上,dirname是一个内置的shell,推荐使用备用名称,以避免与实际命令混淆。

man bash页面

  

用双引号括起来的字符('“')保留引号内所有字符的字面值,但'$','`','\'除外,并且,当启用历史记录扩展时,'! ”。

答案 1 :(得分:1)

使用bash变量时,你应该双引它以保持其状态。

x='/home/ps/temp/bla bla'
 cd $x      ### <----used without double quotes. 
sh: cd: /home/ps/temp/bla: No such file or directory


 cd "$x"    ### <---While using a bash variable you should double-quote it to presever its state.
 pwd
/home/ps/temp/bla bla