2014-06-29 92 views
1

我們需要打印出AWK/bash的報價:回聲

目標ID = 「123」

AssayID = 「456」 打印\,

awk -F\", 'BEGIN{FS=",";OFS=",";} {print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$13,$14,$15,$16,$17,$18,$19,$20,$12}' VrtAssay_123_target_456_assay_Detail2.csv > VrtAssay_123_target_456_assay_Detail2_reorder.csv 

答:我們嘗試:

printf "awk -F"\""," 'BEGIN{FS=\",\";OFS=\",\";} {print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$10,\$11,\$20,\$12,\$13,\$14,\$15,\$16,\$17,\$18,\$19}' VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail2_average.csv > VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail3.csv" 

B.或回波

echo "awk -F"\"", 'BEGIN{FS=\",\";OFS=\",\";} {print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$10,\$11,\$20,\$12,\$13,\$14,\$15,\$16,\$17,\$18,\$19}' VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail2_average.csv > VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail3.csv" 

均可以得到(\消失)

awk -F", 'BEGIN{FS=",";OFS=",";} {print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$13,$14,$15,$16,$17,$18,$19,$20,$12}' VrtAssay_123_target_456_assay_Detail2.csv > VrtAssay_123_target_456_assay_Detail2_reorder.csv 

C.如果我們試圖

printf "awk -F\\", 'BEGIN{FS=\",\";OFS=\",\";} {print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$10,\$11,\$20,\$12,\$13,\$14,\$15,\$16,\$17,\$18,\$19}' VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail2_average.csv > VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail3.csv" 

如果我們試圖

這些會給

Unmatched ". 

D的錯誤信息

echo "awk -F\\", 'BEGIN{FS=\",\";OFS=\",\";} {print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$10,\$11,\$20,\$12,\$13,\$14,\$15,\$16,\$17,\$18,\$19}' VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail2_average.csv > VrtAssay_${TargetIDs}_target_${AssayID}_assay_Detail3.csv" 

這給了我們

Unmatched ". 

想知道任何大師可以提供一些解決方案嗎?

+0

,請注意,是因爲它被用來逃避以下'「'反斜線走了 – Eevee

+0

@Henry什麼是您的實際。問題?爲什麼你改變了這個問題?如果你有任何其他疑問,試着把它作爲另一個問題。 –

回答

3

所有這些工作,你只需要確保一切都正確轉義:

$ echo 'awk -F\",' 
$ echo awk -F\\\", 
$ echo "awk -F\\\"," 

shell的解析規則基本上都是:

  • 裏面'single quotes',除了單引號一切都解釋從字面上;要包括一個單引號,你需要關閉單引號,然後用雙引號來獲得。
  • Inside "double quotes",雙引號和反斜槓必須用反斜槓轉義。所以,一個字面的雙引號是\",文字反斜槓是\\,文字反斜槓和雙引號是\\\"。如果您只寫\\",那是一個字面反斜槓,然後是一個結束引用。
1

給一個嘗試,

echo 'awk -F\",' 

這將打印,因爲它是,如果我們附上單引號內的輸入。

+0

嗨,感謝你的快速回復。但是,我編輯了一下問題,回聲''可能會破壞以下變量$ { TargetIDs}和$ {AssayID}。 – Chubaka

+0

是的,爲了擴展變量,你需要把它們放在雙引號內。 –

2

使用單引號代替雙引號,例如:

echo 'awk -F\",' 
在B試圖