shell 字符串比較與腳本 too many arguments 報錯

1、問題

最近在寫 shell 腳本的時候,遇到了一些小問題,就是我在判斷一個字符串是否爲空的時候常常報下面的錯,程序是正常執行了,可是有這個提示很蛋疼,下面就是看看是什麼問題致使的?shell

[: too many arguments

2、問題解析

原始腳本

個人腳本是這樣寫的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 更改成 adclass

#!/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

運行正常。變量

問題緣由

問題是有空格致使的。可是通過咱們的測試,發現,形如 adadad,這種單單先後有空格的,是不會報錯的,可是像 ad ad,這種兩個字符直接有空格的話,是會進行報錯的。

3、問題解決

字符串判斷

使用 == 進行判斷字符串是否相等, 判斷字符串是否爲空的話用 -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
相關文章
相關標籤/搜索