如何在Bash别名中转义空格?

19

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

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

...尝试"cd $umusic"时出现以下错误...

-bash: cd: /Volumes/180: 没有那个文件或目录

我尝试过各种转义该目录名称中的空格的方法,但都无济于事。(180\ gram,180%20gram,单引号,双引号,无引号。)我知道最简单的解决方案是将目录重命名为"180gram",但我想知道如何解决这个特定的问题。

如果可能的话,我正在使用Mac。

1个回答

25

您使用的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

谢谢,还有一个相关的问题:我认为别名应该作为缩写文件路径。在别名中包含命令是可以的吗? - parisminton
2
一个 shell 别名是一个缩写命令;它们与文件路径没有特定的联系(除了它们可以包含路径,就像 Greg 的建议一样)。 - Gordon Davisson
请注意,别名技术 alias umusic="cd '/Volumes/180 gram/Uncompressed'" 禁止波浪号被解释为主目录。您必须使用 /home/yourUsername/ 而不是波浪号 (~/),这种技术非常有效。 - cameronroytaylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接