我尝试了很多东西。见下文:
尝试进入目录: / cygdrive / c / Users / my dir / Documents
$ DOCS="/cygdrive/c/Users/my\ dir/Documents"
$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory
$ cd /cygdrive/c/Users/my\ dir/Documents
(success)
非常奇怪的行为。当我手动输入时,退格会执行其转义字符。但是当我使用变量DOCS的参数扩展时 我尝试了其他变体,例如没有反斜杠。
$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents
$ echo $DOCS
/cygdrive/c/Users/my dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
或
$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ echo $DOCS
/cygdrive/c/Users/my dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
我知道这是可能的。见这里:
$ echo $HOME
/home/my dir
[编辑]正如所指出的,cd $ HOME也不起作用。引号必须放在它周围。
到底是什么:
$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory
答案 0 :(得分:38)
$ cd "$DOCS"
您需要引用"$DOCS"
以防止将空格解析为单词分隔符。通常,应引用变量引用。
请注意,$HOME
会遇到同样的问题。问题来自于shell评估变量引用时;它与您使用的变量或分配方式无关。这是需要引用的扩展。
$ echo $HOME
/home/my dir
这具有欺骗性。 echo
实际上回显了两个字符串/home/my
和dir
。如果您使用cd
或ls
,您会看到它是如何运作的。
$ ls $HOME
ls: cannot access /home/my: No such file or directory
ls: cannot access dir: No such file or directory
$ cd $HOME
bash: cd: /home/my: No such file or directory
$ cd "$HOME"
<success!>
当我手动输入它而不是变量时,我可以问为什么它可以工作吗?
好问题!让我们检查一下你输入的命令:
$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory
这不起作用的原因是因为Bash不解析变量扩展中的引号。 执行分词,因此将未引用的变量扩展中的空格作为单词分隔符。 不会以任何方式解析引号,这意味着您不能在变量中加入双引号来覆盖单词拆分。
$ cd $DOCS
因此,cd
传递了两个参数。至于cd
知道它看起来像你写的:
$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'
两个参数,双引号完整。
答案 1 :(得分:8)
解决方案:
cd "Documents and Photos"
问题解决了。
我提交此答案的原因是您会发现StackOverflow正在被每天的用户(不仅仅是网络开发人员,程序员或高级用户)使用,这是一个简单的Windows用户问题的头号结果谷歌。
人们越来越懂技术,但在上述情况下不一定熟悉命令行。
答案 2 :(得分:5)
$ DOCS="/cygdrive/c/Users/my\ dir/Documents"
这是你的第一个问题。这会将实际的反斜杠字符放入$DOCS
,正如您可以通过运行此命令看到的那样:
$ echo "$DOCS"
/cygdrive/c/Users/my\ `
定义DOCS
时,您需要转义空格字符。您可以引用字符串(使用单引号或双引号)或,您可以使用反斜杠转义空格字符。你不能做到这两点。 (在大多数类Unix系统上,你可以在文件或目录名中加一个反斜杠,虽然这不是一个好主意。在Cygwin或Windows上,\
是一个目录分隔符。但我&#39 ;我将假设目录的实际名称为my dir
,而不是my\ dir
。)
$ cd $DOCS
这将两个参数传递给cd
。第一个是cygdrive/c/Users/my\
,第二个是dir/Documents
。碰巧cd
悄悄忽略除了第一个参数之外的所有参数,这解释了错误信息:
-bash: cd: /cygdrive/c/Users/my\: No such file or directory
要将$DOCS
设置为Documents
目录的名称,请执行以下任一操作:
$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents
完成上述操作后,要更改为Documents
目录,请将变量引用括在双引号中(对于任何变量引用,这是一个好主意) bash,除非您确定该值没有任何有趣的字符):
$ cd "$DOCS"
您也可以考虑为该目录提供一个名称,但不包含任何空格 - 尽管在Windows上通常很难做到这一点。
答案 3 :(得分:1)
为什么不将以下内容放入.cshrc
(或.bashrc
,或者您的默认shell中):
alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"'
首次执行此操作时,您必须执行
source .cshrc
使用这个新别名更新shell,然后键入
mydoc
随时您想cd
到您的目录。
懒惰是发明的母亲......
答案 4 :(得分:1)
如果您想从c:\
移动而想要转到c:\Documents and settings
,请在控制台上写一下:c:\Documents\[space]+tab
并且cygwin会将其自动填充为c:\Documents\ and\ settings/
答案 5 :(得分:1)
要更改到名称上带有空格的目录,只需键入以下内容:
cd My\ Documents
打输入,您会很好
答案 6 :(得分:0)
尝试
DOCS="/cygdrive/c/Users/my\ dir/Documents";
cd "$DOCS"
答案 7 :(得分:0)
打开桌面。如果您没有在cmd中切换光盘,请键入:
cd desktop
现在,如果要显示子文件夹:
cd ,制作1 空格键,然后按标签 2次
现在,如果您想使用 SPACE IN NAME 输入目录/文件。让我们打开一些文件名 f.g.,打开它我们需要输入:
cd file \ name
P.S。斜线后注意这个空格:)
答案 8 :(得分:0)
只需将文件夹放在单引号中
即可例如
C:\> cd my folder
将是
C:\> cd 'my folder'
答案 9 :(得分:0)
METHOD1 :使用引号
cd "C:/Prgram Files (x86)"
cd 'C:/Program Files (x86)'
<强>广义强>
cd 'Folder Path'
方法2 :不使用引号
cd Program\ Files \(x86\)
<强>广义强> 每当我们想要跳过下一个字符时,我们都会使用blackslash
\
。
对于上述问题:
cd /cygdrive/c/Users/my\ dir/Documents
答案 10 :(得分:0)
Cygwin在识别PC名称之间存在空格时出现问题。因此,要解决此问题,您必须在第一个单词之后使用“ \”,然后包含空格,然后输入姓氏。
例如“ ... / my \ dir /”
$ cd /cygdrive/c/Users/my\ dir/Documents
另一种有趣且简单的方法是将目录置于引号(“”)
例如 如下运行:
$ cd c:
$ cd Users
$ cd "my dir"
$ cd Documents
希望它有用吗?
答案 11 :(得分:0)
对于使用引号的替代方法,对于要经常访问的目录,可以使用cdable_vars
shell option:
shopt -s cdable_vars
docs='/cygdrive/c/Users/my dir/Documents'
现在,要从任何地方切换到该目录,您可以使用
cd docs
,shell将指示它已更改为哪个目录:
$ cd docs
/cygdrive/c/Users/my dir/Documents
答案 12 :(得分:0)
使用引号!
cd "Name of Directory"
或者,您可以转到文件资源管理器,然后单击左上角的“复制路径”!
答案 13 :(得分:-2)
而不是:
DOCS="/cygdrive/c/Users/my\ dir/Documents"
尝试:
DOCS="/cygdrive/c/Users/my dir/Documents"
这适用于任何POSIX系统。