在Unix中“导出”时,文件名中的空格不被识别

时间:2014-03-22 15:26:01

标签: 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/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_TAKEN")。我希望能够说cd $CLASSES_TAKEN

我查了很多帖子,但没有找到问题的答案。

1 个答案:

答案 0 :(得分:0)

我强烈反对此,但您可以使cd的行为与echo相似,只需使用空格加入多个参数:

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

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

这可以按照你的描述进行,但有几个陷阱。正确的方法是引用你的变量。