Bash正则表达式内部不匹配,如果
我有一个文件/tmp/gish.dat,它要么包含一个大于0的数字,要么包含一个或多个数字,要么不包含任何内容 如果存在一个数字,我希望我的函数将a与数字eg 64一起回显。如果没有数字,我希望我的函数什么也不做Bash正则表达式内部不匹配,如果,bash,shell,Bash,Shell,我有一个文件/tmp/gish.dat,它要么包含一个大于0的数字,要么包含一个或多个数字,要么不包含任何内容 如果存在一个数字,我希望我的函数将a与数字eg 64一起回显。如果没有数字,我希望我的函数什么也不做 get_issue() { if [ -f "/tmp/gish.dat" ] then iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+') if [[ iss
get_issue() {
if [ -f "/tmp/gish.dat" ]
then
iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+')
if [[ iss =~ '[0-9]+' ]]
then
echo "#$iss"
fi
fi
}
由于某种原因,内部if从不匹配。bash非常新。您可以通过以下方式重写代码:
get_issue() {
if [ -f "/tmp/gish.dat" ]
then
iss=$(grep -Eo '[0-9]+' /tmp/gish.dat)
if [[ $iss ]]
then
echo "#$iss"
fi
fi
}
由于grep-Eo只提取匹配的数字部分,因此不需要在if中再次将提取的字符串与正则表达式匹配。只要$iss不为空,[[$iss]]就为真。如果您在[[…]内使用正则表达式,则它只是一个字符串
将“[0-9]+”替换为[0-9]+。如果需要打印64、45等内容,请按如下所示更改代码
if [ -f "/tmp/gish.dat" ]
then
iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+' | tr '\n' ' ')
for isss in $iss
do
if [[ $isss =~ '[0-9]+' ]]
then
echo "#$isss"
fi
done;
fi
查看这一个认为变量上缺少一个美元符号。在if条件下将其更改为$iss-。假设外部if工作正常,请尝试打印shell调用iss的结果,并检查其是否工作正常。编辑:正如benjamin已经提到的,您肯定缺少美元符号。也许我还建议您查看-s选项以测试文件是否为空:Protip:自动检测类似问题谢谢,这很好。