cd:参数太多 - 空格正确转义 + 引用?

bri*_*k93 2 cygwin

使用 cygwin 终端,我的 .bashrc 中有以下内容:

export WINHOME="/cygdrive/c/Users/userName"
export TUTORING="$WINHOME/Desktop/Coding\ Projects/Tutoring/"
Run Code Online (Sandbox Code Playgroud)

当我打开 cygwin 时,会发生以下情况:

$ cd $TUTORING
-bash: cd: too many arguments
Run Code Online (Sandbox Code Playgroud)

然后我尝试了:

$ echo $TUTORING
/cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring
Run Code Online (Sandbox Code Playgroud)

复制粘贴 echo 的输出:

cd /cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring 
Run Code Online (Sandbox Code Playgroud)

这似乎有效。知道为什么 cd 我的变量有问题吗?

cho*_*oba 6

分词发生在变量扩展之后。来自man bash

shell 扫描没有出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。

Shell 将 IFS 的每个字符视为分隔符,并使用这些字符作为字段终止符将其他扩展的结果拆分为单词。

正确的方法是使用双引号:

export TUTORING="$WINHOME/Desktop/Coding Projects/Tutoring/"
cd "$TUTORING"
Run Code Online (Sandbox Code Playgroud)