2016-12-15 93 views
0

我試圖運行需要在單或雙引號傳遞參數的應用程序:引用變量

bwa mem -R '@RG\tID:foo\tLB=foo\tPL=illumina\tPU=1234.1\tSM=bar'...

我想在腳本運行此:

#!/usr/bin/bash 

var=foo_bar 
first=$(echo $var | cut -d '_' -f 1) 
second=$(echo $var | cut -d '_' -f 2) 

readgroup="@RG\tID:$first\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=$second" 

echo \'$readgroup\' 

'@RG\tID:foo\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=bar' 

然而,當我用這個作爲我的應用程序調用的參數:

var=foo_bar 
first=$(echo $var | cut -d '_' -f 1) 
second=$(echo $var | cut -d '_' -f 2) 

readgroup="@RG\tID:$first\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=$second" 

bwa mem -R \'$readgroup\' ... 

它解釋爲

\'@RG\tID:HUM-7\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=HUM-7\'

我在做什麼錯?

回答

0

應該是這樣的:

readgroup="'@RG\tID:$first\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=$second'" [with '' wrapping] 

readgroup="@RG\tID:$first\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=$second" [without] 

重要的是使用回聲-e選項[見man echo]

echo -e $readgroup 
+0

謝謝,但我想使用變量作爲另一個程序的輸入 - 在這種情況下如何使用'echo -e'? – fugu

1

應用程序不關心報價;它們僅用於保護來自外殼的字符串。

var=foo_bar 
IFS=_ read first second <<< "$var" 

readgroup="@RG\tID:$first\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=$second" 

bwa mem -R "$readgroup" 

如果\t實際上應該是字面製表符,可以考慮使用printf而不是賦值語句。

printf -v readgroup '@RG\tID:%s\tLB=HUM\tPL=illumina\tPU=1234.1\tSM=%s' "$first" "$second"