理解bash逻辑。 (运算符和引号)

时间:2016-01-23 07:31:21

标签: bash operators quotes double-quotes

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这样的东西?

2 个答案:

答案 0 :(得分:1)

  1. "New book title '$bktitle' added successfully!"是一个双引号字符串,恰好包含一些单引号。如果你想看到文字文本'$bktitle',你可以使用:"New book title '"'$bktitle'"' added successfully!"这是3个字符串(两个双引号(其中一个以单引号结尾,其中一个以单引号开头)和一个单引号连在一起。

  2. $匹配行尾。

  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。