我有一个文件/tmp/gish.dat
,其中包含一个数字(大于0,一个或多个数字)或什么都没有。
如果存在数字,我希望我的函数回显#
以及数字(例如#64
)。如果没有号码,我希望我的功能什么都不做。
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
}
出于某种原因,内心如果永远不匹配。对bash来说很新。
答案 0 :(得分:4)
如果你在[[...]]
内搜索一个正则表达式,它只是一个字符串。
将'[0-9]+'
替换为[0-9]+
。
答案 1 :(得分:2)
您可以这样重写代码:
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
中再次将提取的字符串与正则表达式匹配。 <{1}}在[[ $iss ]]
不为空时为真。
答案 2 :(得分:0)
如果您需要打印#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;
网络连接
看看这个