bash中的动态案例声明

inf*_*ser 1 bash scripting bash-completion

我试图弄清楚如何在bash脚本中创建动态case语句。

例如,假设我有以下内容的awk语句的输出

red
green
blue
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出可以随时更改。

如果此awk输出中包含值,则我尝试执行不同的逻辑。

因此,如果上面的数据在$ list中,那么我在概念上想做类似的事情:

case "${my_var}" in
    $list)
        .....
    something_else)
        .....
esac
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用它来构建动态的自定义标签完成功能(有关某些背景,请参见http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2)。

有任何想法吗?

谢谢。

Jas*_*n H 5

您可以通过执行以下操作在bash中创建动态case语句:

1)确保列表用PIPE(|)分隔。IE浏览器 红色|绿色|蓝色

2)将您的case语句包装在评估中

例如:

valid="red|green|blue"

eval "case \"$choice\" in
    $valid)
        echo do something good here
        ;;
    *)
        echo invalid colour
        ;;
esac"
Run Code Online (Sandbox Code Playgroud)

这适用于简单的变量处理,我不能保证这在所有情况下都适用。