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

dol*_*ola 0 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

Jör*_*tag 5

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

emacs `grep foo \`grep bar * -l\` | awk -F':' '{print $1}' | sort | uniq`
Run Code Online (Sandbox Code Playgroud)

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

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

  • 另请注意传统的"ARG_MAX"警告http://partmaps.org/era/unix/award.html#arg-max.更强大,可扩展的解决方案是`grep -l bar*| xargs grep -l foo | sort -u | xargs emacs` ...有可能评论`xargs emacs`是过度杀戮(你几乎不想打开超过Emacs实例,即使你不想打"bash:参数列表太长"错误;但是那么你对于那些情况有'emacsclient`). (2认同)