如何通过索引值在bash中使用case语句?

我有以下代码,其中用户选择文件类型,然后我为每种情况运行某些代码:

#!/bin/bash

PS3='Please enter your file type choice: '

options=(".c (C)" 
        ".cpp (C++)" 
        ".css (CSS)" 
        ".html (HTML)" 
        ".java (Java)" 
        ".ms (Groff)") 

select option in "${options[@]}" # Asks for the option choice
do
    case "${option}" in
        ".c (C)") # C programming file
            echo "C OPTION SELECTED"
            ;;
        ".cpp (C++)") # C++ programming file
            echo "C++ OPTION SELECTED"
            ;;
        ".css (CSS)") # CSS programming file
            echo "CSS OPTION SELECTED"
            ;;
        ".html (HTML)") # HTML File
            echo "HTML OPTION SELECTED"
            ;;
        ".java (Java)") # Java programming file
            echo "JAVA OPTION SELECTED"
            ;;
        ".ms (Groff)") # Groff markup file
            echo "GROFF OPTION SELECTED"
            ;;
        *) echo "invalid option $option"
           ;;
    esac
done

我想知道如何才能做到这一点,在 case 语句中,您可以通过数组的索引而不是数组的值来处理每个案例:

#!/bin/bash

PS3='Please enter your file type choice: '

options=(".c (C)" 
        ".cpp (C++)" 
        ".css (CSS)" 
        ".html (HTML)" 
        ".java (Java)" 
        ".ms (Groff)") 

select option in "${options[@]}" # Asks for the option choice
do
    case "${option}" in
        1) # C programming file
            echo "C OPTION SELECTED"
            ;;
        2) # C++ programming file
            echo "C++ OPTION SELECTED"
            ;;
        3) # CSS programming file
            echo "CSS OPTION SELECTED"
            ;;
        4) # HTML File
            echo "HTML OPTION SELECTED"
            ;;
        5) # Java programming file
            echo "JAVA OPTION SELECTED"
            ;;
        6) # Groff markup file
            echo "GROFF OPTION SELECTED"
            ;;
        *) echo "invalid option $option"
            ;;
    esac
done

我做了很多研究,但我不是最擅长 bash(但我正在学习)。对不起,如果解决方案很明显,但我会很感激你的帮助,你。

回答

来自help option

读取的行保存在变量中REPLY

  • If you type in `3` and press enter, then REPLY will contain `3` and not `.css (CSS)`, so this works (you have to subtract 1 though, since `select` shows 1-based while bash arrays are 0-based)

以上是如何通过索引值在bash中使用case语句?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>