【问题标题】:cd to a path variable in .bash_profile with spaces, without using quotescd 到 .bash_profile 中带有空格的路径变量,不使用引号
【发布时间】:2014-10-15 11:40:33
【问题描述】:

在我的.bash_profile 中,我有:dl="/Users/gary/Downloads。当我转到终端并输入cd $dl 时,它会按预期进入目录。

但是当我在.bash_profile 中有以下行时:

applib="/Users/gary/Library/Application Support"

然后我输入cd $applib 然后它不起作用,因为路径中有空格。

我知道cd "$applib" 确实可以工作,但是有没有办法让它不需要引号?否则,我必须记住哪些路径变量需要引号,哪些不需要。

【问题讨论】:

  • 输入cd "$gm",否则会分词
  • 是的,我已经在第三段中指出了这一点。
  • 不,仅分配变量时无法防止将来的分词。你可以创建一个别名alias gm='cd "/Users/gary/Library/Application Support"',然后输入gm
  • 您可能需要考虑使用zsh 而不是bash。它的默认行为是不对参数扩展执行分词,因此cd $applib 可以在没有引号的情况下正常工作。它还支持一个设置,允许$applib(如果它不是可执行文件)缩写为cd $applib,这样就更不用输入了。

标签: bash terminal environment-variables cd .bash-profile


【解决方案1】:

使用引号;这就是他们的目的。您无需记住哪些路径需要引号,哪些不需要;只需始终如一地使用它们:

cd "$dl"

cd "$applib"

【讨论】:

    【解决方案2】:

    变量在分词之前被扩展。除了引用之外,没有其他方法可以保留空格。见man bash

    扩展的顺序是:大括号扩展、波浪号扩展、参数、变量和算术扩展以及命令替换(以从左到右的方式完成)、分词和路径名扩展。

    不要记住何时使用引号,而是始终使用它们。它们不会损害没有空格的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2020-06-21
      • 2012-11-12
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多