如何在 bash 中使用 case 语句在后台执行命令?

如何在 bash 中使用 case 语句在后台执行命令?

我有麻烦了:我的脚本没有按预期工作:)

我的部分代码:

readarray operations < operations.list
### lalala
for ((i=0; i<${#operations[@]}; i++)); do
    echo "Perform ${operations[$i]}"
    case ${operations[$i]} in
            "dog rex" )
                    command1 & ;;
            "cat sam" )
                    command2 & ;;
            * )
                    command3 ;;
    esac
done

操作列表文件看起来像

 dog rex
 cat sam
 frog mike
 monster jack

我期望命令1命令2命令3必须在后台执行,但事实并非如此。我做错了什么?

提前致谢,抱歉我的英语不好:)

答案1

它不起作用,因为数组的元素是狗\n 猫\n, 青蛙\n, 怪物\n.所以你的案件语句应为:

case ${operations[$i]} in
        dog\n)
                echo "Step dog" & wait ;;
        cat\n)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

严格来说,我认为忽略一个无辜的灵魂在每次输入后可能丢弃一两个空格的可能性是一个坏主意,因此我宁愿使用:

case ${operations[$i]} in
        dog*)
                echo "Step dog" & wait ;;
        cat*)
                echo "Step cat" & wait ;;
        *)
                echo "Step all else" &  wait ;;
esac

但,YMMV。

相关内容