【发布时间】:2019-12-18 20:06:46
【问题描述】:
我有以下 bash 脚本,我在其中测试一些通配符模式匹配,并期望对 test 的所有调用都回显 match。我不明白为什么最后一个案例不匹配:
#!/bin/bash
test () {
subject=$1
pattern=$2
echo "----------------"
echo "$subject vs $pattern"
case $subject in
($pattern) echo "match";;
(*) echo "no match";;
esac
}
# Test question mark
test "a" "?"
# Test asterisk
test "foobar" "*"
# Test literal
test "a" "a"
# Test backslash
test "\\" "\\"
输出:
$ ./example.sh
----------------
a vs ?
match
----------------
foobar vs *
match
----------------
a vs a
match
----------------
\ vs \
no match
我知道反斜杠是用来转义的,但是我不明白为什么主题和模式相同时不匹配"\\" - 不应该以相同的方式转义吗?
【问题讨论】:
-
顺便说一句,作为一般评论,使用
test作为您的函数的名称是一个糟糕的选择。test是内置的 unix 实用程序(是在您执行[ expression ]时使用的实用程序,但您也可以使用它的名称)。 -
谢谢,以后我会注意的。
-
当我接触 linux 时,你不知道我花了多长时间才意识到我的
test程序给出了奇怪的错误:我正在执行test而不是./test。