regex Bash脚本不匹配正则表达式

pvabu6sv  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(128)

我真的不明白我错过了什么。我有一个非常基本的脚本,需要检查文本是否只包含数字(更具体的是应用程序的语义版本),然后做一些事情。
text.txt是这样的:
appVersion: 2.0.1
这是我的剧本

#!/bin/bash
appVersion=`cat test.txt | awk '/^appVersion:/{print $2}'`
echo "appVersion is " $appVersion
Version=3.1.5

if [[ $appVersion =~ [0-9]+(\.[0-9]+){2,3}$ ]] ; then
    echo "is a number" $appVersion 
 else
    echo "not a number" $appVersion 
fi`

基本上,我从文本中cat我需要什么,然后尝试在if条件中传递该信息。
问题是脚本基本上不是每次运行时都接受变量appVersion,它一直说我的变量中没有任何数字,比如不匹配正则表达式,但如果我传递变量$Version,脚本就可以工作。
顺便说一下,echo "appVersion is"$appVersion正在工作(它正在打印我在appVersion中运行的内容),因此我的变量$appVersion中的命令实际上正在检索我需要的内容。
我想我在awk上漏掉了一些东西,但我不明白是什么。
编辑:
作为测试,我在我的本地pc上运行这个脚本,在wsl2ubuntu20上,然后让它在linux azure devops代理上运行

cuxqih21

cuxqih211#

我建议更换

appVersion=`cat test.txt | awk '/^appVersion:/{print $2}'`

appVersion=$(awk '/^appVersion:/{print $2}' test.txt | dos2unix)

或使用GNU awk

appVersion=$(awk 'BEGIN{RS="\r\n"} /^appVersion:/{print $2}' test.txt)

来转换Windows的回车。
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

相关问题