如何在 /bin/sh 中使用多个 var 值收缩 test -eq 表达式

Rag*_*rog 4 shell scripting shell-script

#!/bin/sh
if [ $num -eq 9 -o $num -eq 75 -o $num -eq 200 ]; then
    echo "do this"
elif [ $num -eq 40 -o $num -eq 53 -o $num -eq 63]; then
    echo "do something for this"
else
    echo "for other do this"
fi
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以缩小if语句中的表达式?也许像

[ $num -eq (9,75,200) ]
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在这个操作系统上没有 GNU 实用程序。

meu*_*euh 7

有时,不同的结构可能最终更具可读性:

case $num in
9|75|200) echo "do this" ;;
40|53|63) echo "do something for this" ;;
*)        echo "for other do this" ;;
esac
Run Code Online (Sandbox Code Playgroud)

  • @Wildcard 正如您所注意到的,`case` 只是在进行字符串比较,而`-eq` 是在进行算术比较,因此前者将在 num=010 与 10 相比时失败,而后者将比较相等。虽然只允许整数。 (2认同)