我试图检测一个字符串是否持有破折号,但似乎没有任何工作对我来说(我是新的shell)。如果shell中的条件问题
if [ "$m" -eq "-" ]
then
echo "has dash"
else
echo "has no dash"
fi
我试图检测一个字符串是否持有破折号,但似乎没有任何工作对我来说(我是新的shell)。如果shell中的条件问题
if [ "$m" -eq "-" ]
then
echo "has dash"
else
echo "has no dash"
fi
if [ "x$m" = "x-" ]; then
echo "is a dash"
else
echo "is not a dash"
fi
使用字符串比较,报价的一切,并避免可能的[
命令行开关混乱(部分未挺,弹Posix的),如果$m
开始于-
。
-eq
用于测试整数的相等性。为了测试字符串是否相等,使用=
代替:
if [ "$m" = - ]
为test
进一步的细节参见手册页。
重要提示:如果'$ m'是空字符串,则将评估为语法错误。为了防止这种情况,一个常见的习惯用法是测试'if [“x $ m”= x-]'。 – 2009-11-28 22:23:19
实际上,''m''附近有''m''引号,''''''args'列表上会有一个空字符串,因此没有语法错误。引用以'x'开头的原因是为了避免'$ m'以'-'开始并且'[''将其解释为命令行开关时出现问题。 – ndim 2009-11-28 22:25:41
@Adam我没有在bash(版本3.1)中出现语法错误。空双引号被视为第一个参数。 – 2009-11-28 22:28:46
'-eq'运算符执行算术比较。您需要使用'='运算符。即:
if test“$ m”=' - ';那么 回声“是破折号”; else 回声“没有短划线”; fi
包含破折号,还是只是一个短划线? – 2009-11-28 22:21:35