【问题标题】:command substitution but without breaking output into multiple arguments命令替换,但不将输出分解为多个参数
【发布时间】:2010-11-24 14:39:38
【问题描述】:

有没有办法在 BASH shell 中进行命令替换而不会将输出分解为多个参数?

我将某个目录的路径(从 GUI 文件浏览器中的位置栏)复制到剪贴板,然后发出以下命令,其中命令 xsel 返回剪贴板内容,在这种情况下是目录的路径:

cd `xsel`

但有些路径包含空格,甚至可能包含一些 BASH 使用的特殊字符。

如何将命令的输出作为单个参数传递,而 BASH 不会弄乱特殊字符?

【问题讨论】:

    标签: bash shell command clipboard substitution


    【解决方案1】:
    cd "$(xsel)"
    

    似乎可以处理所有特殊字符(包括 $ 和空格)。

    我的测试字符串是boo*;cd.*($\: $_

    $ mkdir "$(xsel)"
    $ ls
    boo*;cd.*($\: $_
    
    $ file boo\*\;cd.\*\(\$\\\:\ \$_/
    boo*;cd.*($\: $_/: directory
    
    $ cd "$(xsel)"
    $ pwd
    /tmp/boo*;cd.*($\: $_
    

    【讨论】:

      【解决方案2】:

      如果您不以编程方式执行此操作,Linux 中的大多数 终端允许您通过鼠标中键从剪贴板粘贴。当然,您仍然需要在粘贴前后加上引号,就像@dave 建议的那样。

      【讨论】:

      • 如果目录是 /egg/spam/chunky bacon/my music 并且如果我输入 cd 并粘贴路径,它是 cd /egg/spam/chunky bacon/my music ,它将 cd 到 /鸡蛋/垃圾邮件/矮胖的。
      【解决方案3】:

      你试过了吗:

      cd "`xsel`"
      

      这应该可以完成工作,除非您的路径中有美元 ($) 或反斜杠 (\)。

      【讨论】:

      • 我认为将xsel 括在双引号中后,字符串中是否包含元字符并不重要
      • Bash 将解释双引号内的极少数元字符。只有单引号会停止所有解释。
      猜你喜欢
      • 2015-10-08
      • 2017-04-09
      • 1970-01-01
      • 2016-01-30
      • 2017-01-13
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      相关资源
      最近更新 更多