shell 脚本的字符串插值中的#*$ 有什么作用?

What does the #*$ in a shell script's string interpolation do?

我在 shell 脚本中找到了以下代码,但我不确定 test 条件正在评估什么

if test "${SOME_VAR#*$from asdf/qwer}" != "$SOME_VAR"; then
  echo "##zxcv[message text='some text.' status='NORMAL']";
fi

组合#*$没有什么特别的意思。共有三个特殊符号,在这种情况下,每个符号都有自己的含义。

${SOME_VAR#abc} 是一个 parameter expansion。它的值是$SOME_VAR的值去掉最短匹配abc的前缀。

在您的示例中,abc*${from} asdf/qwer。这意味着任何 * 后跟变量 $from 的值(它是动态的并在计算表达式时被替换),然后是 space 和 asdf/qwer.

总而言之,如果 $SOME_VAR 的值以一个以 ${from} asdf/qwer 结尾的字符串开头,那么 asdf/qwer 之前的所有内容(包括 asdf/qwer 都会被删除,并将结果值作为test.

的第一个参数

在您的终端中键入 man bash 以阅读 bashread it online 的文档。