如何在bash别名中逃避空格?

时间:2010-10-12 01:23:05

标签: whitespace alias bash escaping

尝试在.bashrc文件中设置一些别名。这一个...

export alias umusic="/Volumes/180 gram/Uncompressed/"

...收到以下错误...

  

-bash:cd:/ Volumes / 180:没有这样的文件或目录

...当我尝试“cd $ umusic”时。

我尝试了各种方法来逃避目录名称中的空格,但无济于事。 (180 \ gram,180%20gram,单引号,双引号,无引号。)我意识到最简单的解决方案是将目录重命名为“180gram”,但我想知道如何解决这个特殊问题。

我在Mac上,如果这有任何区别。

1 个答案:

答案 0 :(得分:18)

您使用export命令会使umusic成为环境变量,而不是别名export命令导出在命令行的其余部分上命名的环境变量,可选地使用新值。因此,它正在导出一个名为alias的环境变量(可能未设置)和一个名为umusic的环境变量。

鉴于您正在扩展环境变量,shell会执行以下替换:

cd $umusic
cd /Volumes/180 gram/Uncompressed/

会生成您获得的错误,因为未引用该空格。相反,如果你这样做:

cd "$umusic"

然后扩展

cd "/Volumes/180 gram/Uncompressed/"

这是你所期待的。

但是,为此使用环境变量可能仍然有点太多工作,因为您必须引用扩展。相反,尝试这个别名:

alias umusic="cd '/Volumes/180 gram/Uncompressed'"

你将只用

运行
$ umusic
$ pwd
/Volumes/180 gram/Uncompressed