2009-11-28 42 views
1

我試圖檢測一個字符串是否持有破折號,但似乎沒有任何工作對我來說(我是新的shell)。如果shell中的條件問題

if [ "$m" -eq "-" ] 
then 
echo "has dash" 
else 
echo "has no dash" 
fi 
+2

包含破折號,還是隻是一個短劃線? – 2009-11-28 22:21:35

回答

2
if [ "x$m" = "x-" ]; then 
    echo "is a dash" 
else 
    echo "is not a dash" 
fi 

使用字符串比較,報價的一切,並避免可能的[命令行開關混亂(部分未挺,彈Posix的),如果$m開始於-

4

-eq用於測試整數的相等性。爲了測試字符串是否相等,使用=代替:

if [ "$m" = - ] 

test進一步的細節參見手冊頁。

+2

重要提示:如果'$ m'是空字符串,則將評估爲語法錯誤。爲了防止這種情況,一個常見的習慣用法是測試'if [「x $ m」= x-]'。 – 2009-11-28 22:23:19

+2

實際上,''m''附近有''m''引號,''''''args'列表上會有一個空字符串,因此沒有語法錯誤。引用以'x'開頭的原因是爲了避免'$ m'以'-'開始並且'[''將其解釋爲命令行開關時出現問題。 – ndim 2009-11-28 22:25:41

+1

@Adam我沒有在bash(版本3.1)中出現語法錯誤。空雙引號被視爲第一個參數。 – 2009-11-28 22:28:46

1

'-eq'運算符執行算術比較。您需要使用'='運算符。即:

if test「$ m」=' - ';那麼 回聲「是破折號」; else 回聲「沒有短劃線」; fi