2012-04-25 113 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的一个大选项参数)。