0
我有一个函数“checkExist”,它接受一个命令并根据输出文件是否已经存在执行它。我通过这样的命令,其中文件1和文件2是命令创建的输出文件的只是名字,因此,如果他们已经存在,会询问你是否要覆盖,否则将跳过:带单引号的Eval awk命令
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被输入到脚本“smartfilter.sh”含有内的功能checkExist。所以他们只是文件输入。
在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的单引号'
,而不是正确解析它们。我试过\'
,但那也行不通。有没有适当的方法来做到这一点?
这工作!你介意解释一下逻辑吗? – 2012-03-23 21:31:08
shell在双引号字符串中进行变量替换,因此它将替换“$ 3”和“$ 4”替换为空(因为这些变量未设置)。您的单引号包含在双引号内,因此被shell忽略(但不被awk)。我只是用'\'引用美元,所以shell不认为它们是变量。壳虽然剥夺了'''引号,所以awk做正确的事情。 (如果你想让shell和awk引用它,你必须说'\\\'')。我能说什么?引用级别是黑魔法。 – ams 2012-03-23 21:37:31
你是我的朋友的巫师 – 2012-03-23 21:47:44