首頁 > 運維 > linux運維 > 《Advanced Bash-scripting Guide》學習(十八):[[ ]]與[ ]的一些特殊情況

《Advanced Bash-scripting Guide》學習(十八):[[ ]]與[ ]的一些特殊情況

PHP中文网
發布: 2017-07-11 18:16:08
原創
1525 人瀏覽過

本文所選的例子來自《Advanced Bash-scripting Gudie》一書,譯者 楊春敏 黃毅

 

<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 和 -o一般與[ ]使用,如:[ "$exp1" -a "$exp2" ]

&& 和 || 一般與[[ ]] 使用,如:[[ 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>
登入後複製

以上屬於字串的比較,只不過==的功能在[[]][]中的行為是不同的

<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> 
登入後複製

 

以上是《Advanced Bash-scripting Guide》學習(十八):[[ ]]與[ ]的一些特殊情況的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板