2009-11-28 38 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