Shell-Script

如何匹配 case 語句中的特定單詞或其部分?

  • April 1, 2021

假設有以下情況:

#!/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不需要exampleeeeExam工作。

您可以做的是扭轉比較:

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

你可以決定哪個更好。我覺得第一個很優雅。

引用自:https://unix.stackexchange.com/questions/642971