我需要比较shell中的字符串:
var1="mtu eth0" if [ "$var1" == "mtu *" ] then # do something fi
但显然"*"在壳牌中不起作用.有办法吗?
使用Unix工具.该程序cut
将愉快地缩短字符串.
if [ "$(echo $var1 | cut -c 4)" = "mtu " ];
......应该做你想做的事.
bash
最短的修复:
if [[ "$var1" = "mtu "* ]]
Bash [[ ]]
不会得到全局扩展,不像[ ]
(由于历史原因必须).
bash --posix
哦,我发帖太快了.Bourne shell,不是Bash ......
if [ "${var1:0:4}" == "mtu " ]
${var1:0:4}
意思是前四个字符$var1
.
/bin/sh
啊,对不起 Bash的POSIX仿真还远远不够; 一个真正的原始Bourne shell没有${var1:0:4}
.你需要像mstrobl的解决方案.
if [ "$(echo "$var1" | cut -c0-4)" == "mtu " ]
您可以调用expr
以匹配Bourne Shell脚本中的正则表达式的字符串.以下似乎有效:
#!/bin/sh var1="mtu eth0" if [ "`expr \"$var1\" : \"mtu .*\"`" != "0" ];then echo "match" fi