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