-
-
不知道是不是发现了一个关于bash的bug,请大牛来看看
-
2017-2-24 13:37 3033
-
问题环境: Cygwin & Cygwin64
问题软件: bash (4.4.5-1 ~ 4.4.12-3,该版本范围的bash测试存在问题,其他版本未测试)
问题描述: 使用bash执行一个名为config.sub的脚本时,在某个case内变量无法赋值
相关代码:
echo maybe_os=$maybe_os ##Test case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) echo 111! os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) echo 222! os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) echo "Test!" ##Test echo $1 | sed 's/-[^-]*$//' ##Test basic_machine=sun4 ##Test echo basic_machine=$basic_machine ##Test basic_machine="sun4" ##Test echo basic_machine=$basic_machine ##Test basic_machine=`echo $1 | sed 's/-[^-]*$//'` echo basic_machine=$basic_machine ##Test if [ "$basic_machine" != "$1" ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac
上面代码中后面含有##Test注释的行,是为了调试脚本而添加的。
执行命令:
/bin/bash ./config.sub sun4
可以看见输出为:
maybe_os=sun4
Test!
sun4
basic_machine=sun4
basic_machine=sun4
basic_machine=
Invalid configuration `sun4': machine `' not recognized
可见basic_machine变量没有被正确赋值,该脚本使用ash,dash执行就没有问题,并且前几个月我的Cygwin64没有更新包时,bash执行也是没有问题的。
不清楚问题出在哪里,感觉应该是bash的bug。
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!
赞赏
他的文章
谁下载
无
看原图