带单引号的Eval awk命令

时间:2012-03-23 19:42:39

标签: bash

我有一个函数“checkExist”,它接受一个命令并根据输出文件是否已经存在来执行它。我传递一个这样的命令,其中file1和file2只是命令创建的输出文件的名称,所以如果它们已经存在,它会询问你是否要覆盖,否则它会跳过:

checkExist file1 file2 command1 command2

在实际使用中这样:

checkExist 1.txt 2.txt "echo $1 | awk '$5 <= 10 {print $3, $4}'" "echo $2 | awk '$5 <= 10 {print $3, $4}'"

$ 1和$ 2以上是包含函数checkExist的脚本“smartfilter.sh”的输入。所以它们只是文件输入。

稍后在checkExist函数中,如果用户键入'Y / y'进行覆盖,或者文件尚不存在,那么它将

eval $3 &
eval $4 &
wait

我得到一个错误:

awk:  >= 10 {print , }
awk:  ^ syntax error
awk:  >= 10 {print , }
awk:               ^ syntax error
awk:  >= 10 {print , }
awk:                 ^ syntax error
awk: cmd. line:1:  >= 10 {print , }
awk: cmd. line:1:                  ^ unexpected newline or end of string

我知道这是关于awk和eval周围的单引号'没有正确解析它们。我试过\',但这也不起作用。有没有正确的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

checkExist 1.txt 2.txt "echo $1 | awk '\$5 <= 10 {print \$3, \$4}'" "echo $2 | awk '\$5 <= 10 {print \$3, \$4}'"