如何在sh中正确使用*?我试过谷歌搜索但却找不到任何东西。以下回应。那是为什么?
file="test test"
if [ "$file" != "te"* ]
then
echo true
else
echo false
fi
答案 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* ]]