JavaScript 有一个函数:
'world'.startsWith('w')
true
Run Code Online (Sandbox Code Playgroud)
我怎样才能用shell测试这个?我有这个代码:
if [ world = w ]
then
echo true
else
echo false
fi
Run Code Online (Sandbox Code Playgroud)
但它失败了,因为它正在测试平等。我更喜欢使用内置函数,但此页面中的任何实用程序都是可以接受的:
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
gle*_*man 11
如果您的 shell 是 bash: 在双括号内,除非完全引用,否则 == 运算符的右侧是一个模式:
if [[ world == w* ]]; then
echo true
else
echo false
fi
Run Code Online (Sandbox Code Playgroud)
或者更简洁:[[ world == w* ]] && echo true || echo false
[*]
如果您不是专门针对 bash:使用 case 语句进行模式匹配
case "world" in
w*) echo true ;;
*) echo false ;;
esac
Run Code Online (Sandbox Code Playgroud)
[*],但你必须要小心使用A && B || C
,因为形式C
如果将被执行或者A出现故障或B出现故障。如果 A 失败,该if A; then B; else C; fi
表单只会执行 C。
将变量设置为该值(这里我们设置$str
为world
):
str=world
Run Code Online (Sandbox Code Playgroud)
然后:
if [ -n "${str%%w*}" ]
then
echo false
else
echo true
fi
Run Code Online (Sandbox Code Playgroud)
w*
积极地从 的开头删除模式$str
。 w*
匹配w
后跟任意数量的字符,因此如果可能的话它将匹配整个字符串。$str
以 开头w
。或者:
if [ "$str" = "${str#w}" ]
then
echo false
else
echo true
fi
Run Code Online (Sandbox Code Playgroud)
w
从 中删除。$str
$str
。$str
以 开头w
。