2012-04-25 116 views
1

下面是一些代碼,我在一個叫做libtool的在一個開源項目的文件中找到(未編譯此係統上):這個bash代碼在做什麼?

case $arg in 
    -*=*) 
    optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; 
    *) optarg= ;; 
    esac 

我得到的情況下發言,但我不知道第一optarg=...一行。它試圖得到什麼?對於此測試情況下,讓:

CC="arm-elf-gcc" 
arg="--tag=CC" 
Xsed="/usr/bin/sed -e 1s/^X//" 

在OS X上運行這讓我:

../libtool: line 828: X--tag=CC: command not found 

我想可能是嘗試指派「武裝精靈-GCC」到變量OPTARG,但我不確定。該軟件在Ubuntu中整體編譯,但libtool文件看起來非常不同。

+3

您錯過了'$ echo'的定義;在大多數GNU軟件中,這是搜索不會擴展轉義序列的「echo」實現的結果。 – geekosaur 2012-04-25 02:06:06

+0

@geekosaur調試時,$ echo被發現爲空。任何想法要做什麼(得到一個新的回聲?)? – jtpereyda 2012-04-25 04:29:44

+0

您可以嘗試將其設置爲「echo」。另外,如果您使用在另一個系統上生成的'libtool'(例如,Linux vs OS X),則可能需要運行'libtoolize'來生成一個可在您的本地系統上運行的'libtool'。 – geekosaur 2012-04-25 04:39:00

回答

1

爲了您的例子,其中arg="--tag=CC"是試圖價值CC

它通過使用正則表達式來刪除--tag=做到這一點隔離。 sed命令s/A/B/替換與B匹配的任何內容。A是正則表達式,它查找字母,數字,下劃線和破折號的任意組合,後跟等號,B爲空。所以當它看到--tag=CC正則表達式匹配--tag將其替換爲無,因此該值僅爲CC

1

這只是處理形式的命令行參數

`--option=value` 

在正常getopts的處理中,如果指定-o value,可變optarg設置爲value;這段代碼可以確保同樣的事情發生,如果你改爲指定上面的長表單(這看起來像是getopts的一個大選項參數)。