Bash语法字符串插入

时间:2013-10-21 23:41:30

标签: bash

我有一个命令,我希望在我的.bashrc中有一个函数。

从命令行

find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color "string of words" ' \;

将在当前目录的任何pdf中找到“字符串”。

尽管一小时内最好的部分,我真的不能得到“字串”作为字符串变量 - 即。

eg="string of words"

find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg ' \;

这显然不起作用,但我尝试了"/'/\echo黑客,阵列扩展的各种组合,但没有运气。我确信这是可能的,我确信这很容易,但我无法让它发挥作用。

5 个答案:

答案 0 :(得分:0)

变量扩展之类的东西只能在双引号内工作,而不是单引号。您是否尝试过使用双引号?

像这样:

find . -name "*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg " \;

答案 1 :(得分:0)

问题可能是'命令周围的单引号pdftotext。单引号将阻止它们发生的字符串中的任何变量扩展。双引号"可能会更幸运。

eg="string of words"

find . -name '*.pdf' -exec sh -c "pdftotext {} - | grep --with-filename --label={} --color $eg " \;

答案 2 :(得分:0)

可能最简单:

find . -name '*.pdf' -exec \
  sh -c 'pdftotext $0 - | grep --with-filename --label=$0 --color "$1"' {} "$eg" \;

答案 3 :(得分:0)

你需要装饰逻辑的方式与你所做的不同:

eg="string of words"
find . -name '*.pdf' -exec sh -c "pdftotext {} - | \
   grep -H --label={} --color '$eg'" \;

即,通过使shell进程外部引号分隔符",shell变量扩展工作,并使用'分隔搜索变量,将其保留为字符串。

答案 4 :(得分:0)

编写一个小型shell脚本mypdfgrep并从find调用

#/bin/bash

pdftotext "$1" - | grep --with-filename --label "$1" --color "$2"

然后运行

$ chmod +x mypdfgrep
$ find . -name '*.pdf' -execdir /full/path/to/mypdfgrep '{}' "string of words" \;