Bash 当';出口';在Unix中

Bash 当';出口';在Unix中,bash,variables,unix,path,Bash,Variables,Unix,Path,在MacOS中,我创建了名称带有空白的目录。当使用bash/Unix命令进行如下所示的导航时,它可以正常工作 cd /Users/jdoe/"Box Sync"/Professional/"Classes Taken" pwd /Users/jdoe/Box Sync/Professional/Classes Taken cd "/Users/jdoe/Box Sync/Professional/Classes Taken" pwd /Users/jdoe/Box Sync/Professio

在MacOS中,我创建了名称带有空白的目录。当使用bash/Unix命令进行如下所示的导航时,它可以正常工作

cd /Users/jdoe/"Box Sync"/Professional/"Classes Taken"
pwd
/Users/jdoe/Box Sync/Professional/Classes Taken

cd "/Users/jdoe/Box Sync/Professional/Classes Taken"
pwd
/Users/jdoe/Box Sync/Professional/Classes Taken
当我定义如下所示的环境变量时,相同的路径名不起作用。有人能解释为什么不是这样吗

export CLASSES_TAKEN='"/Users/jdoe/Box Sync/Professional/Classes Taken"'
echo $CLASSES_TAKEN
"/Users/jdoe/Box Sync/Professional/Classes Taken"
$ cd $CLASSES_TAKEN
-bash: cd: "/Users/jdoe/Box: No such file or directory

export CLASSES_TAKEN=/Users/jdoe/"Box Sync"/Professional/"Classes Taken"
echo $CLASSES_TAKEN
/Users/jdoe/"Box Sync"/Professional/"Classes Taken"
cd $CLASSES_TAKEN
-bash: cd: /Users/jdoe/"Box: No such file or directory
但是,当我这样做时,它会起作用:

export CLASSES_TAKEN="/Users/jdoe/Box Sync/Professional/Classes Taken"
cd "$CLASSES_TAKEN"
pwd
/Users/jdoe/Box Sync/Professional/Classes Taken
我的问题是,在使用环境变量时,如何避免使用引号(
“$CLASSES\u take”
)。我想能够说
cd$CLASSES\u take


我查看了许多帖子,没有找到任何问题的答案。

我强烈反对这样做,但您可以使
cd
表现得像
echo
,只需将多个参数与空格连接起来:

cd() { builtin cd "$*"; }

export CLASSES_TAKEN='/Users/jdoe/Box Sync/Professional/Classes Taken'
echo $CLASSES_TAKEN
cd $CLASSES_TAKEN

正如您所描述的那样,这是可行的,但有几个陷阱。正确的方法是引用变量

不能,如果要保留这些值,则需要引用。否则,您的
cd$CLASSES_take
将被翻译成
cd/Users/jdoe/Box Sync/Professional/CLASSES take
,因此它将执行
cd/Users/jdoe/Box
。然而,也许这对您很有用:
cd/Users/jdoe/Box\Sync/Professional/Classes\take
为什么要与之抗争呢?如果您喜欢Unix/Linux的功能,就要从日常生活中消除一整类自创的问题,并停止创建带有空格的文件/目录名:-)!
BoxSync
不是很容易阅读吗?(当然,这并不能解决从外部源获取的文件/目录的问题)。祝你好运