在bash中使用双重重音(反引号)的问题

时间:2011-10-06 08:53:58

标签: bash shell

我想弄清楚我需要修改哪些文件;所以,我使用grep命令序列。我想找出哪些文件包含foo和bar。因此,我的命令是:
grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq
这个命令给我一个大的列表,如下所示:
pageABC.txt
pageBCD.txt
pageDEF.txt

我希望在emacs中打开此输出。所以我通常做的是:
emacs ` whatever_was_in_my_output `
此命令通常会打开所有文件 如果我试试 emacs `grep foo `grep bar * -l` | awk -F':' '{print $1}' | sort | uniq `
Emacs甚至都不会开始。也许是因为使用了双重坟墓口音。 任何想法如何解决这个问题?

非常感谢,

d

2 个答案:

答案 0 :(得分:5)

你忘了逃避内部命令替换:

emacs `grep foo \`grep bar * -l\` | awk -F':' '{print $1}' | sort | uniq`

在这种情况下,我通常更喜欢替代命令子语法,因为它更容易嵌套:

emacs $(grep foo $(grep bar * -l) | awk -F':' '{print $1}' | sort | uniq)

答案 1 :(得分:3)

避免使用bash中的反引号,并使用$(command)来运行子命令。与反引号不同,它们可以正确嵌套。