理解 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
?
这样的东西呢?
"New book title '$bktitle' added successfully!"
是一个双引号字符串,恰好包含一些单引号。如果你想看到文字文本 '$bktitle'
,你可以使用:"New book title '"'$bktitle'"' added successfully!"
这是 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.
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
?
"New book title '$bktitle' added successfully!"
是一个双引号字符串,恰好包含一些单引号。如果你想看到文字文本'$bktitle'
,你可以使用:"New book title '"'$bktitle'"' added successfully!"
这是 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 like1a
?
关于 ^
和 +
你是对的! [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 like1a.00
?
是的,这将匹配恰好包含两位小数的小数。
如果您希望它也接受字母,只要它以数字开头,您需要:
egrep '^[0-9][0-9a-z]+[.][0-9][0-9]'
[0-9a-z]
匹配任何数字 0-9 和任何字母 a-z.