以下是我在开源项目中名为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文件看起来非常不同。
答案 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的一个大选项参数),这段代码确保会发生同样的事情。