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

问题描述 投票:0回答:2

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

export WINHOME="/cygdrive/c/Users/userName"
export TUTORING="$WINHOME/Desktop/Coding\ Projects/Tutoring/"

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

$ cd $TUTORING
-bash: cd: too many arguments

那么我试过:

$ echo $TUTORING
/cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring

复制粘贴echo的输出:

cd /cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring 

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

cygwin
2个回答
4
投票

变量扩展后会发生单词拆分。来自man bash

shell扫描参数扩展,命令替换和算术扩展的结果,这些结果在双引号内没有出现用于分词。

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

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

export TUTORING="$WINHOME/Desktop/Coding Projects/Tutoring/"
cd "$TUTORING"

1
投票

使用双引号来逃避整个路径。

因为路径内的空间,cd命令认为有几个参数

© www.soinside.com 2019 - 2024. All rights reserved.