理解 bash 逻辑。 (运营商和报价)

Understanding bash logic. (Operators and 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?

这样的东西呢?
  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],例如。

I thought single quotes made everything literal? But this was give the output of New Book title 'BASH' added successfully.

在你的例子中:

bktitle="BASH"
echo "New book title '$bktitle' added successfully!"

在 double-quoted 字符串 ("") 中,single-quotes ('') 不被解释,但变量被解释。

如果你这样做了:

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)。

Why would this line only accept integers? I know this ^ is for starting with, the + is for means the preceding must occur at least once.. but for my knowledge of $ I'm not sure. but would it not accept something like 1a?

关于 ^+ 你是对的! [0-9]匹配0到9之间的任意数字。$表示ends-with,表示字符串结束。

^[0-9]+$

匹配任何包含 1 个或多个数字的字符串,从头到尾,仅此而已。

最后一个问题:

egrep '^[0-9]+[.][0-9][0-9]' Why would this line only accept decimal numbers for exactly 2 decimal places? i thought the + would only allow for it to make sure that the starting number must be 0-9. so why isn't it accepting something like 1a.00?

是的,这将匹配恰好包含两位小数的小数。

如果您希望它也接受字母,只要它以数字开头,您需要:

egrep '^[0-9][0-9a-z]+[.][0-9][0-9]'

[0-9a-z] 匹配任何数字 0-9 和任何字母 a-z.