【发布时间】:2011-05-04 01:59:47
【问题描述】:
我需要检查变量是否具有以指定子字符串开头的字符串值。
在 Python 中应该是这样的:
foo = 'abcdef'
if foo.startswith('abc'):
print 'Success'
在 Ksh 中检查字符串 $foo 是否以子字符串 bar 开头的最明确方法是什么?
【问题讨论】:
我需要检查变量是否具有以指定子字符串开头的字符串值。
在 Python 中应该是这样的:
foo = 'abcdef'
if foo.startswith('abc'):
print 'Success'
在 Ksh 中检查字符串 $foo 是否以子字符串 bar 开头的最明确方法是什么?
【问题讨论】:
这很简单,但看起来有点奇怪:
if [[ "$foo" == abc* ]]; then ...
人们会假设 ksh 会使用当前目录中的文件扩展模式,但它会进行模式匹配。不过,您需要[[。单个[ 不起作用。如果foo 中没有空格,则引号不是绝对必要的。
【讨论】:
$foo 为空或未设置,也不需要引号。
$foo 中有“=”怎么办?
if 命令将foo 的内容作为单个参数获取,所以没关系。而if 命令只查找恰好是= 的参数,它不会尝试进一步拆分参数。
你也可以做正则匹配:
if [[ $foo =~ ^abc ]]
对于更复杂的模式,我建议使用变量而不是直接将模式放在测试中:
bar='^begin (abc|def|ghi)[^ ]* end$'
if [[ $foo =~ $bar ]]
【讨论】:
还有:
foo='abcdef'
pattern='abc*'
case "$foo" in
$pattern) echo startswith ;;
*) echo otherwise ;;
esac
【讨论】:
case $foo in 'abc'* ) echo yes ;; esac