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
以阅读 bash
或 read it online 的文档。
我在 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
以阅读 bash
或 read it online 的文档。