1

这是我在一个开源项目(不在该系统上编译)中名为 libtool 的文件中找到的一些代码:

  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

我认为它可能试图将“arm-elf-gcc”分配给变量 optarg,但我不确定。该软件在 Ubuntu 中整体编译正确,但 libtool 文件看起来非常不同。

4

2 回答 2

1

对于您的示例,arg="--tag=CC"尝试隔离值的位置CC

它通过使用正则表达式删除--tag=. sed 命令s/A/B/将任何与 A 匹配的内容替换为 B。A 是一个正则表达式,用于查找字母、数字、下划线和破折号后跟等号的任意组合,而 B 为空。因此,当它看到--tag=CC正则表达式匹配时,将其--tag替换为空,因此该值是简单的CC.

于 2012-04-25T02:11:10.510 回答
1

这只是处理形式的命令行参数

`--option=value`

在正常的 getopts 处理中,如果指定-o value,则变量optarg设置为value; 如果您改为指定上面的长格式(这看起来像 getopts 的一个大选项参数),则此代码可确保发生同样的事情。

于 2012-04-25T02:12:01.557 回答