Shell-Script
如何匹配 case 語句中的特定單詞或其部分?
假設有以下情況:
#!/bin/sh case $1 in e|ex|exa|exam|examp|exampl|example) echo "OK" ;; t|te|tes|test) echo "Also OK" ;; *) echo "Error!" ;; esac
對於這種情況,是否有更優雅且同時符合 POSIX 的解決方案(即,沒有 bash、zsh 等)?
PS不需要
exampleeee
或Exam
工作。
您可以做的是扭轉比較:
case "example" in "$1"*) echo OK ;; *) echo Error ;; esac
用多個詞,你可以堅持你原來的想法
case "$1" in e|ex|exa|exam|examp|exampl|example) : ;; t|te|tes|test) : ;; f|fo|foo) : ;; *) echo error ;; esac
或使用循環和“布爾”變數
match="" for word in example test foo; do case "$word" in "$1"*) match=$word; break ;; esac done if [ -n "$match" ]; then echo "$1 matches $match" else echo Error fi
你可以決定哪個更好。我覺得第一個很優雅。