2009-12-02 74 views
2

我正在寫一個腳本,試圖插入一個目錄名稱到一個pax命令,我不知道如何獲得正確的語法。這就是我正在嘗試的,但它似乎將$ DIRNAME作爲正則表達式字符串的一部分。如何將腳本變量插入到正則表達式字符串中?

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s'/$DIRNAME\/upload\///' 

謝謝!

回答

4

嘗試撥打電話時PAX使用雙引號而不是單引號:

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s"/$DIRNAME\/upload\///" 

在幾發炮彈(如bash和SH),$變量只能獲得當它們發生在雙引號字符串展開,而不是單引用的字符串。


例如,下面的腳本:

#!/bin/sh 

DIRNAME=$(echo 'hello') 
echo "Single quotes around regexp:" 
echo 'hello world' | sed 's/$DIRNAME/hi/' 

echo "Double quotes around regexp:" 
echo 'hello world' | sed "s/$DIRNAME/hi/" 

生成輸出:

Single quotes around regexp: 
hello world 
Double quotes around regexp: 
hi world 
+0

這是行不通的。問題是$ DIRNAME不會回顯DIRNAME的內容,而只是將文本字符串$ DIRNAME本身插入到正則表達式字符串中。 – user77413 2009-12-02 19:06:08

+0

正在運行的腳本是什麼shell?慶典? TCSH? – 2009-12-02 19:26:50

+0

對不起,我再次嘗試,我得到的錯誤是與pax命令,而不是$ DIRNAME一旦我雙引號。我正在使用bash。 – user77413 2009-12-02 21:31:19

相關問題