Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解bash逻辑。(运算符和引号)_Bash_Operators_Quotes_Double Quotes - Fatal编程技术网

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

理解bash逻辑。(运算符和引号),bash,operators,quotes,double-quotes,Bash,Operators,Quotes,Double Quotes,我以为单引号把一切都写下来了?但这是给的输出 为什么这一行只接受整数?我知道这个^是用于开头的,+表示前面必须至少出现一次。但就我的$知识而言,我不确定。它不接受像1a这样的东西吗 egrep ^[0-9]+$ 为什么此行只接受小数点后2位的小数?我认为+只允许它确保起始号码必须是0-9。那么为什么它不接受像1a.00这样的东西呢 “新书名“$BKTILE”添加成功!”是一个双引号字符串,碰巧包含一些单引号。如果您想查看文本“$BKTILE”,可以使用:“新书标题”“添加成功”“$BKTILE

我以为单引号把一切都写下来了?但这是给的输出

为什么这一行只接受整数?我知道这个
^
是用于开头的,+表示前面必须至少出现一次。但就我的
$
知识而言,我不确定。它不接受像
1a
这样的东西吗

egrep ^[0-9]+$
为什么此行只接受小数点后2位的小数?我认为
+
只允许它确保起始号码必须是
0-9
。那么为什么它不接受像
1a.00这样的东西呢

  • “新书名“$BKTILE”添加成功!”
    是一个双引号字符串,碰巧包含一些单引号。如果您想查看文本
    “$BKTILE”
    ,可以使用:
    “新书标题”“添加成功”“$BKTILE!”
    ,它是3个字符串(两个双引号(其中一个以单引号结尾,另一个以单引号开头)和一个单引号连接在一起

  • $
    与行尾匹配

  • 1a.00
    不匹配,因为它的形式不是“行的开头后跟一定数量的数字,后面跟一个文本”
    ,但它将匹配
    ^[0-9]+[a][.][0-9][0-9]

  • 我以为单引号把一切都写下来了?但这是给
    新书标题“BASH”的输出成功添加的

    在您的示例中:

    egrep ^[0-9]+[.][0-9][0-9]
    
    在双引号字符串(
    “”
    )中,不解释单引号(
    “”
    ),而是解释变量

    如果您这样做:

    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!'
    
    bktitle="BASH"
    echo "New book title \'$bktitle\' added successfully!"
    
    您将看到(在前两个示例中):

    已成功添加新书名“$bktile”

    或:

    已成功添加新书标题$bktitle

    单引号不能解释变量或双引号(或
    \escape sequences

    为什么这一行只接受整数?我知道这个
    ^
    是用来开头的,
    +
    是用来表示前面必须至少出现一次。。但就我的
    $
    知识而言,我不确定。但它会不会接受像
    1a
    这样的东西

    egrep ^[0-9]+$
    
    关于
    ^
    +
    你是对的<代码>[0-9]
    匹配0到9之间的任何数字<代码>$
    表示以结尾,并表示字符串的结尾

    bktitle="BASH"
    echo 'New book title $bktitle added successfully!'
    
    匹配任何包含1个或多个数字的字符串(从头到尾),而不匹配任何其他数字

    现在是最后一个问题:

    egrep'^[0-9]+[.][0-9][0-9]'
    为什么此行只接受小数点后2位的小数?我认为
    +
    只允许它确保起始数字必须是0-9。那么为什么它不接受像
    1a.00这样的东西呢

    是的,这将匹配正好包含两位小数的十进制数

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

    ^[0-9]+$
    

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

    它与bash无关。这不是bash语言吗?谢谢您的解释。1.但我以为单引号会显示文字?正如我发布的所有代码一样,它们正是我想要的,但我不理解它们背后的逻辑。2.既然$与行匹配,“1a1”会成功吗?3.但这难道不意味着前面的0-9应该至少出现一次,然后是一个。和两个小数位。那么为什么1a.00不匹配呢?单引号将显示文本。但是,如果在双引号字符串中加上单引号,那么仍然有一个双引号字符串,并且会对变量进行插值。没有“1a1”包含除[0-9]以外的字符,因此它不匹配。如果没有在双引号中插入单引号,是否可以安全地使用bktTitle=“BASH”echo“New book title$bktTitle added successfully!”所以当您说$匹配字符串的结尾?它是指字符串的最后一个字符吗?或者像这样使用“^[0-9]+$”意味着从0-9开始,并且必须至少出现一次并以它结束?