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

par*_*ton 13 bash whitespace alias escaping

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

export alias umusic="/Volumes/180 gram/Uncompressed/"
Run Code Online (Sandbox Code Playgroud)

...得到以下错误......

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

...当我尝试"cd $ umusic"时.

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

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

Gre*_*ill 18

您使用的export命令正在umusic一个环境变量,而不是一个别名.该export命令导出在命令行的其余部分上命名的环境变量,可选地使用新值.所以它导出一个名为alias(可能没有设置)的环境变量和一个名为的环境变量umusic.

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

cd $umusic
cd /Volumes/180 gram/Uncompressed/
Run Code Online (Sandbox Code Playgroud)

由于未引用空格,因此会生成错误.相反,如果您这样做:

cd "$umusic"
Run Code Online (Sandbox Code Playgroud)

那么扩张就是

cd "/Volumes/180 gram/Uncompressed/"
Run Code Online (Sandbox Code Playgroud)

这是你所期待的.

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

alias umusic="cd '/Volumes/180 gram/Uncompressed'"
Run Code Online (Sandbox Code Playgroud)

你将与​​谁一起运行

$ umusic
$ pwd
/Volumes/180 gram/Uncompressed
Run Code Online (Sandbox Code Playgroud)

  • shell别名是缩写命令; 它们与文件路径没有特定的连接(除了它们可以包含路径,正如Greg的建议那样). (2认同)