首页
社区
课程
招聘
不知道是不是发现了一个关于bash的bug,请大牛来看看
2017-2-24 13:37 3033

不知道是不是发现了一个关于bash的bug,请大牛来看看

bxc 活跃值
6
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元/年,续费同价!

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回