Linux环境变量中的空格?

A T*_*A T 5 linux bash environment-variables bashrc escape-characters

给定目录:/media/foo/can haz/bar,我尝试使用以下命令编辑bash.rc

export Foo=/media/foo/can haz/bar
export Foo=/media/foo/can\ haz/bar
export Foo='/media/foo/can haz/bar'
export Foo="/media/foo/can haz/bar"
export Foo='"/media/foo/can haz/bar"'
export Foo="'/media/foo/can haz/bar'"
Run Code Online (Sandbox Code Playgroud)

但每次,我都无法得到类似以下内容的工作(不使用"$Foo"):

cd $Foo
Run Code Online (Sandbox Code Playgroud)

如何在 Linux 系统上设置带有空格的环境变量?

slh*_*hck 9

问题不在于您的环境变量包含空格。你忘记引用你的论点

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

如果您不引用$Foo,该cd命令实际上会看到两个(或更多)参数,因为默认情况下空格分隔参数。在您的特定情况下,您将分别传递/media/foo/can和传递haz/bar,因为外壳将它们在空间中分开。双引号变量是一个养成的好习惯,并且会在很多涉及空格的情况下为您节省。

如果您想要一种不带引号的非常丑陋的方式来实现这一点,请cd像这样覆盖您的内置函数:

cd() { builtin cd "$*"; }
Run Code Online (Sandbox Code Playgroud)

如果路径包含空格,这将起作用,因为$*它将包含由第一个 IFS 字符(通常是空格)分隔的单个参数(/media/foo/canhaz/bar),然后您将它们与双引号粘在一起。

但是,像这样覆盖内置函数从来都不是一个好主意。