命令替换但不会将输出分解为多个参数

时间:2009-09-01 10:57:13

标签: bash shell command clipboard substitution

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

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

cd `xsel`

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

如何将命令的输出作为单个参数传递,并且没有BASH混乱使用特殊字符?

3 个答案:

答案 0 :(得分:5)

cd "$(xsel)"

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

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

$ mkdir "$(xsel)"
$ ls
boo*;cd.*($\: $_

$ file boo\*\;cd.\*\(\$\\\:\ \$_/
boo*;cd.*($\: $_/: directory

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

答案 1 :(得分:2)

你试过了吗?

cd "`xsel`"

这应该可以胜任,除非你的路径中有美元($)或反斜杠(\)。

答案 2 :(得分:0)

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