2

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

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

cd `xsel`

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

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

4

3 回答 3

5
cd "$(xsel)"

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

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

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

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

$ cd "$(xsel)"
$ pwd
/tmp/boo*;cd.*($\: $_
于 2009-09-01T11:15:23.330 回答
2

你有没有尝试过:

cd "`xsel`"

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

于 2009-09-01T10:59:27.903 回答
0

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

于 2009-09-01T11:10:45.977 回答