我正在嘗試根據一組允許的命令使用正則運算式匹配特定命令。
這是我想要達到的結果:
foo --happy-cat run meow # valid command
foo --happy-cat test meow # valid command
foo --happy-cat run-away woof # invalid command
這就是我試圖做的
case $* in
(*run* | *test* | *build*) echo yes ;;
*) echo no ;;
esac
什么不起作用
我的匹配錯誤地匹配run-away為有效命令。我只想匹配run,test或者build被空格包圍
uj5u.com熱心網友回復:
您將必須匹配給定單詞周圍的空格,如下所示:
case "$*" in
*" run "*|*" test "*|*" build "*) echo yes ;;
*) echo no ;;
esac
這也稱為全域匹配而不是正則運算式。
上面的腳本將匹配" run "并列印yes,但是因為run-away它不會匹配第一組 glob 并將列印no。
uj5u.com熱心網友回復:
要添加到 anubhava 的答案,如果您想使用實際的正則運算式,您可以這樣做:
s='foo --happy-cat run-away woof' # test string
regex='\s ((run)|(test)|(build))\s '
if [[ $s =~ $regex ]]
then
echo "yes"
else
echo "no"
fi
這具有匹配空格的優點,不僅是空格,還有制表符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473917.html
下一篇:將字串串列轉換為動態型別串列
