Bash 识别$&引用;紧跟其后的是字母/字母数字单词

Bash 识别$&引用;紧跟其后的是字母/字母数字单词,bash,shell,Bash,Shell,“$”后面不应紧跟数字[0-9]。它应该只显示 输出-“$”后面紧跟着一个标签/字母数字/字母字符 输入:dirname$0/./bin/$12JAVA\u INV/$FILE12NAME grep -o '[$][a-zA-z_]*' 输出:$FILE12NAME grep -o '[$][a-zA-z_]*' 使用此命令,我将收到一个输出:$$$FILENAME您将在结果中获得$,因为*意味着匹配零个或多个前面的模式$0匹配,因为它有一个$后跟0个字母。 grep -o '[$][a-z

“$”后面不应紧跟数字[0-9]。它应该只显示 输出-“$”后面紧跟着一个标签/字母数字/字母字符

输入:
dirname$0/./bin/$12JAVA\u INV/$FILE12NAME

grep -o '[$][a-zA-z_]*'
输出:
$FILE12NAME

grep -o '[$][a-zA-z_]*'

使用此命令,我将收到一个输出:
$$$FILENAME

您将在结果中获得
$
,因为
*
意味着匹配零个或多个前面的模式<代码>$0匹配,因为它有一个
$
后跟0个字母。
grep -o '[$][a-zA-z_]*'
如果您至少需要一个字母,请使用
+
,它表示一个或多个字母

但是,如果希望能够匹配
$FILE12NAME
,还需要在第一个字符后允许数字。因此,请使用:

grep -i -o '\$[a-z_][a-z_0-9]*'

这与
$
匹配,后跟字母或下划线,后跟零个或多个字母、下划线或数字。

看起来您需要:

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | awk '{print $NF}' FS=/
$FILE12NAME
但如果您真的想按照您描述的方式解析它,您可以执行以下任一操作:

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -e 's/.*\(\$[^0-9]\)/\1/'
$FILE12NAME
$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -E 's/.*(\$[^0-9])/\1/'
$FILE12NAME

@Cyrus我同意你的观点,我在这里分享了部分代码。更好的是:
'\$[:alpha:][:alnum:][:unum:][ucode>(
-I
是不需要的,它在任何语言环境下都能工作)。谢谢你的回答,你能描述一下吗?