bash – 如何在名称中的空间cd进入目录?
我尝试了很多事情.见下文:
尝试进入目录: $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 $cd "$DOCS" 您需要引用“$DOCS”以防止将空格解析为单词分隔符.通常应引用变量引用. 请注意,$HOME会有同样的问题.当shell评估变量引用时,问题来自于这与您使用的变数或您如何分配给他们无关.这是需要引用的扩展. $echo $HOME /home/my dir 这是欺骗性的回声实际上是回应两个字符串/ 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"' 两个参数,双引号完好无损. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |