Linux Bash-基于解析CSV的变量case语句选项?

Linux Bash-基于解析CSV的变量case语句选项?,linux,bash,shell,menu,Linux,Bash,Shell,Menu,好吧,我被难住了,但这肯定是可能的 假设您有options.csv,看起来像 ID, option 1, something 2, something else 3, you get the point 4, fin 我想把这些项目解析出来,作为case语句中用户可选择的项目使用,从而在CSV发生变化时使语句本质上是可变的。我想象我可以用read和IFS=解析文件,但我不知道如何将解析的内容放入用户可选择的菜单中 在bash中可能发生这样的事情吗?我当然会这么认为,但我不知道如何实施。如果CS

好吧,我被难住了,但这肯定是可能的

假设您有options.csv,看起来像

ID, option
1, something
2, something else
3, you get the point
4, fin
我想把这些项目解析出来,作为case语句中用户可选择的项目使用,从而在CSV发生变化时使语句本质上是可变的。我想象我可以用read和IFS=解析文件,但我不知道如何将解析的内容放入用户可选择的菜单中

在bash中可能发生这样的事情吗?我当然会这么认为,但我不知道如何实施。如果CSV的ID列与case语句中的选择输入匹配,则会获得奖金

@塞勒斯让我走上了正确的道路

像这样的?虽然我知道语法不正确:

#read csv file to an array and ignore header
mapfile -t array < <(awk -F ', ' 'NR>1{print $2}' $file)

    #Use array to map values to selection menu
    select name in "${array[@]}";do echo "$name" >> item.list; done
    cat $sysBanner > itemMenu && cat item.list >> itemMenu && echo -e "\n\n" >> itemMenu
    cat itemMenu
    read -p "Item to select:  "
    case $itemSelected in

            @)    echo -e "\nOK, $name selected.\n"
            sleep 1 && clear
            componentName=$name
            ;;
            * )     echo "invalid selection. Please try again."
            ;;
    esac
#将csv文件读取到数组并忽略标题
mapfile-t数组<>item.list;完成
cat$sysBanner>itemMenu&&cat item.list>>itemMenu&&echo-e“\n\n”>>itemMenu
cat项目菜单
读取-p“要选择的项目:”
案例$items已在中选择
@)echo-e“\nOK,$name已选定。\n”
睡眠1&清除
componentName=$name
;;
*)echo“选择无效。请重试。”
;;
以撒
使用bash和awk:

# Read data to an array and ignore header
mapfile -t array < <(awk -F ', ' 'NR>1{print $2}' file.csv)

# Use array with select command
select name in "${array[@]}"; do echo "$name"; done
#将数据读取到数组并忽略标头

mapfile-t array<欢迎使用SO。Stack Overflow是一个面向专业和热心程序员的问答网站。我们的目标是在你的问题中添加一些你自己的代码,以显示你自己为解决这个问题所做的研究工作。谢谢@cyrus。第一部分很棒。然而,第二部分仍在苦苦挣扎,要把每一项都写进案例陈述中。请看上面编辑的答案,因为评论太长了。这可能会有帮助:谢谢-即使你知道这条路线,但是,你的案例选项是否仍然是固定的? 1) something 2) something else 3) you get the point 4) fin #?