Bash如何创建磁盘分区选择菜单?数组取值异常怎么修复?
问题解决方法
核心错误原因
Bash 中获取数组指定下标元素的正确语法为 ${数组名[下标]},你使用的$dev[$selected_number]写法会被 Shell 解析为:取未定义的变量dev的空值,拼接字符串[、输入的编号值、],因此最终输出为[5]而非预期的设备路径。
修复步骤
- 将错误的赋值行
selected_device=$dev[$selected_number]替换为以下正确写法即可解决核心问题:
selected_device=${dev[$selected_number]}
优化后的完整脚本
你可以参考以下加入了输入校验、代码简化逻辑的版本:
#!/bin/bash count=0 # 简化设备列表获取逻辑,无需额外调用sed for device in $(fdisk -l | awk '/^\//{print $1}') do count=$((count+1)) dev[$count]=$device echo "$count: $device" done # 无可用设备时直接退出 if [ $count -eq 0 ]; then echo "未检测到可用块设备" exit 1 fi # 输入合法性校验 while : do echo "请选择卷(输入数字 1-$count):" read -r selected_number # 判断是否为合法数字且在可选范围内 if [[ $selected_number =~ ^[0-9]+$ && $selected_number -ge 1 && $selected_number -le $count ]]; then break fi echo "输入不合法,请重新输入" done selected_device=${dev[$selected_number]} echo "你选择的设备是: $selected_device"
内容的提问来源于stack exchange,提问作者Davide Pacchiarotti
相关产品推荐
相关产品推荐

