最近在寫 shell 腳本的時候,遇到了一些小問題,就是我在判斷一個字符串是否爲空的時候常常報下面的錯,程序是正常執行了,可是有這個提示很蛋疼,下面就是看看是什麼問題致使的?shell
[: too many arguments
個人腳本是這樣寫的bash
#!/bin/bash list='1 2 4 ad' if [ $list -eq '' ] then echo "empty" else echo "not empty" fi
運行後測試
[root@wi-mi-2034 scripts]# bash test.sh test.sh: line 3: [: too many arguments not empty
第一個問題: -eq
是用於比較兩個數字的,比較字符串要使用 ==
。code
使用 "==" 進行比較,替換 -eq
.ip
#!/bin/bash list='1 2 4 ad' if [ $list == '' ] then echo "empty" else echo "not empty" fi
運行以後字符串
[root@wi-mi-2034 scripts]# bash test.sh test.sh: line 3: [: too many arguments not empty
仍是有這個報錯,可是通過個人測試發現,若是咱們將 list 值設置爲 沒有空格的話,是不會出現這個問題。string
list 原來的值爲:1 2 4 ad
更改成 ad
class
#!/bin/bash list='ad' if [ $list == '' ] then echo "empty" else echo "not empty" fi
運行以後test
[root@wi-mi-2034 scripts]# bash test.sh not empty
運行正常。變量
問題是有空格致使的。可是通過咱們的測試,發現,形如 ad
和 ad
和 ad
,這種單單先後有空格的,是不會報錯的,可是像 ad ad
,這種兩個字符直接有空格的話,是會進行報錯的。
使用 ==
進行判斷字符串是否相等, 判斷字符串是否爲空的話用 -z
或者 -n
== :判斷字符串是否相等 -z :判斷 string 是不是空串 -n :判斷 string 是不是非空串
示例:當咱們的字符串必須包含空格的時候
#!/bin/bash list='1 2 4 ad' if [ $list == '' ] then echo "empty" else echo "not empty" fi
咱們能夠在使用變量作比較的時候,在變量外使用雙引號。
#!/bin/bash list='1 2 4 ad' if [ "$list" == '' ] then echo "empty" else echo "not empty" fi