&2`" ] #true . 1>&2 means outputting standard output to file descriptor 2 (standard error output: screen) 3 [ 2 -eq 2 ] &"/> &2`" ] #true . 1>&2 means outputting standard output to file descriptor 2 (standard error output: screen) 3 [ 2 -eq 2 ] &">
Home > Article > Operation and Maintenance > "Advanced Bash-scripting Guide" Study (18): Some special cases of [[ ]] and [ ]
The examples selected in this article come from the book "Advanced Bash-scripting Gudie", Translator Yang Chunmin Huang Yi
<span style="color: #008080">1</span> <span style="color: #000000">例1: </span><span style="color: #008080">2</span> [ <span style="color: #800080">1</span> -eq <span style="color: #800080">1</span> ] && [ -n <span style="color: #800000">"</span><span style="color: #800000">`echo true 1>&2`</span><span style="color: #800000">"</span> ] #<span style="color: #0000ff">true。1>&2表示将标准输出输出到文件描述符2(标准错误输出:屏幕)</span> <span style="color: #008080">3</span> [ <span style="color: #800080">2</span> -eq <span style="color: #800080">2</span> ] && [ -n <span style="color: #800000">"</span><span style="color: #800000">`echo true 1>&2`</span><span style="color: #800000">"</span><span style="color: #000000"> ] #(not output) </span><span style="color: #008080">4</span> <span style="color: #008080">5</span> [ <span style="color: #800080">1</span> -eq <span style="color: #800080">2</span> -a -n <span style="color: #800000">"</span><span style="color: #800000">`echo true 1>&2`</span><span style="color: #800000">"</span> ] #<span style="color: #0000ff">true,这是错误的结果,难道是因为单括号数值计算中有两个条件判断吗?</span> <span style="color: #008080">6</span> <span style="color: #008080">7</span> [[ <span style="color: #800080">1</span> -eq <span style="color: #800080">2</span> && -n <span style="color: #800000">"</span><span style="color: #800000">`echo true 1>&2`</span><span style="color: #800000">"</span> ] #(not output),有些-a 或 -o 不正确的情况,显然&&或||要稳妥些
-a and -o are generally used with [ ], such as: [ "$exp1" -a "$exp2" ]
&& and || are generally used with [[ ]], such as: [[ condition1 && condition2 ]]
<span style="color: #008080">1</span> <span style="color: #000000">例2 </span><span style="color: #008080">2</span> [ $a == z*<span style="color: #000000"> ] #<span style="background-color: #00ff00">模式匹配:如果$a以a开头,则为true </span></span><span style="color: #008080">3</span> [ $a == <span style="color: #800000">"</span><span style="color: #800000">z*</span><span style="color: #800000">"</span> ] #<span style="background-color: #00ff00">字符匹配:如果$a的值等于z*<span style="color: #000000">,则为true </span></span><span style="color: #008080">4</span> <span style="color: #008080">5</span> [ $a = z*<span style="color: #000000"> ] #<span style="background-color: #00ff00">file globbing and word splitting 将会发生,什么意思? </span></span><span style="color: #008080">6</span> [ $a = <span style="color: #800000">"</span><span style="color: #800000">z*</span><span style="color: #800000">"</span> ] #<span style="background-color: #00ff00">字符匹配:如果$a的值等于z*,则为true</span>
The above is a comparison of strings, but the behavior of the == function is different in [[]] and [].
<span style="color: #008080"> 1</span> <span style="color: #000000">例3 </span><span style="color: #008080"> 2</span> <span style="color: #000000">#只能用[[ ]] 可以进行进制转换比较 </span><span style="color: #008080"> 3</span> <span style="color: #008080"> 4</span> <span style="color: #0000ff">decimal</span>=<span style="color: #800080">15</span><span style="color: #000000"> #十进制 </span><span style="color: #008080"> 5</span> octial=<span style="color: #800080">017</span><span style="color: #000000"> #八进制 </span><span style="color: #008080"> 6</span> hex=<span style="color: #800080">0x0f</span><span style="color: #000000"> #十六进制 </span><span style="color: #008080"> 7</span> <span style="color: #0000ff">if</span> [ <span style="color: #800000">"</span><span style="color: #800000">$decimal</span><span style="color: #800000">"</span> -eq <span style="color: #800000">"</span><span style="color: #800000">$octal</span><span style="color: #800000">"</span><span style="color: #000000"> ] </span><span style="color: #008080"> 8</span> <span style="color: #0000ff">then</span> <span style="color: #008080"> 9</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal equals $octal</span><span style="color: #800000">"</span> <span style="color: #008080">10</span> <span style="color: #0000ff">else</span> <span style="color: #008080">11</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal is not equal to $octal</span><span style="color: #800000">"</span> # <span style="color: #800080">15</span> is not equal to <span style="color: #800080">017</span> <span style="color: #008080">12</span> <span style="color: #0000ff">fi</span> <br> # 不能用单括号[ ]计算! <span style="color: #008080">13</span> <span style="color: #0000ff">if</span> [[ <span style="color: #800000">"</span><span style="color: #800000">$decimal</span><span style="color: #800000">"</span> -eq <span style="color: #800000">"</span><span style="color: #800000">$octal</span><span style="color: #800000">"</span><span style="color: #000000"> ]] </span><span style="color: #008080">14</span> <span style="color: #0000ff">then</span> <span style="color: #008080">15</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal equals $octal</span><span style="color: #800000">"</span> # <span style="color: #800080">15</span> equals <span style="color: #800080">017</span> <span style="color: #008080">16</span> <span style="color: #0000ff">else</span> <span style="color: #008080">17</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal is not equal to $octal</span><span style="color: #800000">"</span> <span style="color: #008080">18</span> <span style="color: #0000ff">fi</span> # 要用双括号[[ ]]计算! <span style="color: #008080">19</span> <span style="color: #0000ff">if</span> [[ <span style="color: #800000">"</span><span style="color: #800000">$decimal</span><span style="color: #800000">"</span> -eq <span style="color: #800000">"</span><span style="color: #800000">$hex</span><span style="color: #800000">"</span><span style="color: #000000"> ]] </span><span style="color: #008080">20</span> <span style="color: #0000ff">then</span> <span style="color: #008080">21</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal equals $hex</span><span style="color: #800000">"</span> # <span style="color: #800080">15</span> equals <span style="color: #800080">0x0f</span> <span style="color: #008080">22</span> <span style="color: #0000ff">else</span> <span style="color: #008080">23</span> <span style="color: #0000ff">echo</span> <span style="color: #800000">"</span><span style="color: #800000">$decimal is not equal to $hex</span><span style="color: #800000">" #<span class="fontstyle0">[[ $hexadecimal ]]也能计算<br></span></span> <span style="color: #008080">24</span> <span style="color: #0000ff">fi</span>
The above is the detailed content of "Advanced Bash-scripting Guide" Study (18): Some special cases of [[ ]] and [ ]. For more information, please follow other related articles on the PHP Chinese website!