web-dev-qa-db-ja.com

KSHは、文字列が部分文字列で始まるかどうかを確認します

変数に指定された部分文字列で始まる文字列の値があるかどうかを確認する必要があります。

Pythonでは、次のようになります。

foo = 'abcdef'
if foo.startswith('abc'):
    print 'Success'

Kshかどうかをチェックする最も明示的な方法は何ですか$fooは部分文字列barで始まりますか?

15
z4y4ts

とてもシンプルですが少し奇妙に見えます:

if [[ "$foo" == abc* ]]; then ...

Kshはパターンを現在のディレクトリのファイルで展開すると想定しますが、代わりにパターンマッチングを行います。ただし、[[が必要です。シングル[は機能しません。 fooに空白がない場合、引用符は厳密には必要ありません。

25
Aaron Digulla

また:

foo='abcdef'
pattern='abc*'

case "$foo" in
    $pattern) echo startswith ;;
    *) echo otherwise ;;
esac
17
glenn jackman

正規表現マッチングを行うこともできます:

if [[ $foo =~ ^abc ]]

より複雑なパターンについては、パターンを直接テストに置く代わりに、変数を使用することをお勧めします。

bar='^begin (abc|def|ghi)[^ ]* end$'
if [[ $foo =~ $bar ]]
6