bktitle="Bash"
echo "New book title '$bktitle' added successfully!"
我认为单引号使一切都是字面的?但这是给出了
的输出New Book title Bash added successfully!
egrep ^[0-9]+$
为什么这一行只接受整数?我知道这个^
用于开头,+表示前面必须至少出现一次。但据我所知$
,我不确定。它不接受像1a
这样的东西吗?
egrep ^[0-9]+[.][0-9][0-9]
为什么这一行只接受正好2位小数的十进制数?我认为+
只允许它确保起始编号必须为0-9
。那么为什么它不接受像1a.00
这样的东西?
答案 0 :(得分:1)
"New book title '$bktitle' added successfully!"
是一个双引号字符串,恰好包含一些单引号。如果你想看到文字文本'$bktitle'
,你可以使用:"New book title '"'$bktitle'"' added successfully!"
这是3个字符串(两个双引号(其中一个以单引号结尾,其中一个以单引号开头)和一个单引号连在一起。
$
匹配行尾。
1a.00
不匹配,因为它不是“行首,后跟一些数字后跟文字.
的形式但它匹配^[0-9]+[a][.][0-9][0-9]
,例如。
答案 1 :(得分:0)
我认为单引号使一切都是字面的?但是这给出了
New Book title 'BASH' added successfully
的输出。
在你的例子中:
bktitle="BASH"
echo "New book title '$bktitle' added successfully!"
在双引号字符串(""
)中,单引号(''
)不会被解释,但变量是。
如果你这样做了:
bktitle="BASH"
echo 'New book title \'$bktitle\' added successfully!'
或者这个:
bktitle="BASH"
echo "New book title \'$bktitle\' added successfully!"
或者这个:
bktitle="BASH"
echo 'New book title $bktitle added successfully!'
你会看到(在前两个例子中):
New book title '$bktitle' added successfully!
或者:
New book title $bktitle added successfully!
单引号不能解释变量或双引号(或\escape sequences
)。
为什么这一行只接受整数?我知道这个
^
是开头的,+
意味着前面必须至少发生一次..但是据我所知$
我不确定。但它不会接受像1a
这样的东西吗?
关于^
和+
你是对的! [0-9]
匹配0到9之间的任何数字。$
表示结束,表示字符串的结尾。
^[0-9]+$
匹配包含一个或多个数字的任何字符串,从头到尾,没有别的。
现在提出你的上一个问题:
egrep '^[0-9]+[.][0-9][0-9]'
为什么这一行只接受十进制数字正好2个小数位?我认为+
只允许它确保起始编号必须是0-9。那么为什么它不接受像1a.00
这样的东西?
是的,这会匹配包含正好两位小数的十进制数字。
如果您希望它也接受字母,只要它以数字开头,您就需要:
egrep '^[0-9][0-9a-z]+[.][0-9][0-9]'
[0-9a-z]
匹配任何数字0-9,以及任何字母a-z。