bash 中的逻辑所有/任何

ale*_*xis 3 shell bash

我想运行一系列测试(每个测试在不同的 PID 上),并且仅当所有测试成功退出时才得出成功状态。就像是

check $PID1 && check $PID2 && check $PID3
Run Code Online (Sandbox Code Playgroud)

但对于不确定数量的测试。我怎样才能做到这一点?

ilk*_*chu 8

写成一个循环应该不会太难:

pids=(1025 3425 6474)
check_all() {
    for pid in "$@"; do
        if ! check "$pid"; then
            return 1
        fi
    done
}
check_all "${pids[@]}"
Run Code Online (Sandbox Code Playgroud)

与 链接的命令链一样&&,该函数将在第一次失败时停止check

虽然请注意我替换了你的变量PID1PID2等有一个单一的阵列。Bash 可以迭代名称以特定字符串开头的变量,但数组更方便。(除非这些变量来自脚本的外部,通过您无法传递正确数组的环境。)

另外,我check在这里对循环中的命令进行了硬编码。您可以为要运行的函数传递不同的命令,但是分词和引号处理的问题已经成熟。(见这里这里。)