如何在sh字符串比较中使用*

时间:2016-01-21 03:43:01

标签: sh

如何在sh中正确使用*?我试过谷歌搜索但却找不到任何东西。以下回应。那是为什么?

file="test test"

if [ "$file" != "te"* ]

then

   echo true

else

   echo false

fi

2 个答案:

答案 0 :(得分:1)

为了避免所有潜在的问题,在使用POSIX shell时,您应该考虑使用旧的expr正则表达式或匹配表达式。您的选择是:

#!/bin/sh

file="test test"

if [ $(expr "$file" : "te.*") -gt 0 ]
then
    echo true
else
    echo false
fi

if [ $(expr substr "$file" 1 2) = "te" ]
then
    echo true
else
    echo false
fi

不优雅,但它们是shell的正确工具。每个的简短说明和每个expr语法是:

string : regularExp          : returns the length of string if both sides match, 
                               returns 0 otherwise
match string regularExp      : same as the previous one
substr string start length   : returns the substring of string starting from 
                               start and consisting of length characters

答案 1 :(得分:0)

我做了一些谷歌搜索并找到了一个很好的bash脚本资源: Advanced Bash-Scripting Guide

有一个部分可以回答您的问题:

[[ $a == z* ]]   # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).

[ $a == z* ]     # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).

所以在你的情况下,条件应该是:

if [[ file != te* ]]