这个bash代码在做什么?

时间:2012-04-25 02:02:26

标签: bash libtool

以下是我在开源项目中名为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文件看起来非常不同。

2 个答案:

答案 0 :(得分:1)

对于arg="--tag=CC"正在尝试隔离值CC

的示例

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

答案 1 :(得分:1)

这只是处理表单

的命令行参数
`--option=value`

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