Bash脚本如何检查数组中是否存在重复的用户输入?
修正后的Bash脚本(禁止重复输入)
原脚本的核心问题是把ARRAY_ITEMS当作字符串拼接而非数组存储,且缺少重复输入检测逻辑。以下是修改后的完整脚本:
#!/bin/bash # 初始化空数组 ARRAY_ITEMS=() while true; do printf "\n A B C\n" # 打印当前数组内的所有元素 echo -e "This is the array: ${ARRAY_ITEMS[*]} " read -p "Input: " INPUT case "$INPUT" in A|B|C) # 检测输入字符是否已存在于数组中 if [[ " ${ARRAY_ITEMS[@]} " =~ " $INPUT " ]]; then echo "ERROR. $INPUT is already selected." else echo "Adding $INPUT to array." ARRAY_ITEMS+=("$INPUT") fi ;; *) echo -e "Whoopsy! Invalid input." ;; esac done
关键修改说明:
- 数组规范化:将
ARRAY_ITEMS初始化为空数组ARRAY_ITEMS=(),让每个输入字符作为独立元素存储,而非拼接成字符串,便于重复检测。 - 重复检测逻辑:通过
[[ " ${ARRAY_ITEMS[@]} " =~ " $INPUT " ]]判断输入是否已存在于数组中:- 存在则输出指定错误提示
- 不存在则将字符加入数组并打印成功提示
- 代码简化:将A/B/C的分支合并为
A|B|C,减少冗余代码;移除原脚本中提前定义的无效var1变量,直接按需输出提示信息。
内容的提问来源于stack exchange,提问作者user20426723
相关产品推荐
相关产品推荐

