是否有包含 case 语句匹配的特殊变量

sta*_*fry 3 bash case

如果您编写 Bashcase语句,是否可以在不将其显式分配给变量的情况下获取当前匹配项?

考虑

case $(some subshell command sequence) in
  one) stuff ;;
  *) stuff "$case_match";;
esac
Run Code Online (Sandbox Code Playgroud)

我知道我可以执行以下操作,但希望更简洁。

case_match=$(some subshell command sequence)
case "$case_match" in
...
Run Code Online (Sandbox Code Playgroud)

是否有一个特殊的变量代表$case_match


以下来自@Hauke Laging 的评论是另一个人为的例子。你可以这样做:

today=$(date '+%A')
case "$today" in
  *) echo "It's $today" ;;
esac
Run Code Online (Sandbox Code Playgroud)

但是这样做会很好 - 问题问这是否可能(但它不是):

case $(date '+%A') in
  *) echo "It's $case_match" ;;
esac
Run Code Online (Sandbox Code Playgroud)

case_match躲避我们的黄金变量在哪里)

Sté*_*las 5

不。

随着zsh -o extendedglob但是你可以这样做:

case $(cmd) in
  ((#m)*) printf '%s\n' "Match: $MATCH"
esac
Run Code Online (Sandbox Code Playgroud)

(#m)是启用的通配标志$MATCH。它在诸如${var//(#m)?/<$MATCH>}.

或者:

case $(cmd) in
  ((#b)(???)(*)) printf '%s\n' "First 3 chars: $match[1], rest: $match[2]"
esac
Run Code Online (Sandbox Code Playgroud)

(#b)用于启用反向引用

或者(不需要extendedglob):

case ${output::=$(cmd)} in
  (*) printf '%s\n' "Output: $output"
esac
Run Code Online (Sandbox Code Playgroud)