小编Sai*_*Hax的帖子

漏洞?bash select——输入的数据作为“未绑定变量”返回

我正在运行 Linux 3.10.0-693.2.2.el7.x86_64,我一生都无法弄清楚为什么会发生这种情况。这似乎是一个错误,shellchecker 没有发现任何问题。

#!/bin/bash
set -o nounset

### functions
options=(one two three)

select var in "${options[@]}"; do
    # make sure it is a valid choice
    if (( REPLY <= ${#options[@]} )) && [[ $REPLY  =~ ^[0-9]+$ ]]; then
        case $var in
            one)   exit;;
            two)  df -h /tmp;;
            *)      echo $var;;
        esac
        break
    else
        printf "Invalid selection.\n" >&2
    fi
Run Code Online (Sandbox Code Playgroud)

我使用 set -xv 进行故障排除,但这是没有它的输出。在生产中,options[@] 将由命令设置,并且它们返回的数字将是动态的。所以我希望菜单在 $var 上执行 *) 中的命令——但我必须检查 REPLY 中的越界选择。这是输出。

$ bad_select.bash
1) one
2) two
3) three
#? 4 …
Run Code Online (Sandbox Code Playgroud)

bash select

5
推荐指数
1
解决办法
318
查看次数

标签 统计

bash ×1

select ×1