var
与えられた変数(例えば)が与えられた文字列のリスト内の単語で始まるかどうかを確認する関数を書きたいです。このリストは変更されません。
インスタンス化するために、またはvar
で始まるかどうかを確認したいとしますaa
。abc
3@3
var
また、文字が含まれていることを確認したいと思います>
。
この関数が呼び出されると仮定すると、check_func
私の意図された用途は次のとおりです。
if check_func "$var"; then
do stuff
fi
aardvark
たとえば、とのために「何かを行う」必要がありますabcdef
。[email protected]
12>5
私は見たこの問題ユーザーが作品の一部を提供する状況:
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
上記のリストを繰り返し、この機能を使用するという考えです。私の難しさは、シャットダウン(または復帰に代わるもの)がこれをどのように行うべきかを正確に理解していないことです。
ベストアンサー1
check_prefixes () {
value=$1
for prefix in aa abc 3@3; do
case $value in
"$prefix"*) return 0
esac
done
return 1
}
check_contains_gt () {
value=$1
case $value in
*">"*) return 0
esac
return 1
}
var='aa>'
if check_prefixes "$var" && check_contains_gt "$var"; then
printf '"%s" contains ">" and starts with one of the prefixes\n' "$var"
fi
テストを2つの機能に分けました。case ... esac
これが決定されると、両方が使用され、成功(0)を返します。一致するものがない場合は、 failure(1) が返されます。
プレフィックスリストを動的リストのようにするには、最初の関数を次のように書くことができます。
check_prefixes () {
value=$1
shift
for prefix do
case $value in
"$prefix"*) return 0
esac
done
return 1
}
(確認する値は最初のパラメータです。これを関数のパラメータリストに保存し、関数のパラメータリストから削除します。残りのパラメータを繰り返します。)次に、value
次shift
のように呼び出します。
check_prefixes "$var" aa abc 3@3
2番目の機能も同様の方法で変更できます。
check_contains () {
value=$1
shift
case $value in
*"$1"*) return 0
esac
return 1
}
(任意の部分文字列を確認してください)または
check_contains_oneof () {
value=$1
shift
for substring do
case $value in
*"$substring"*) return 0
esac
done
return 1
}
(複数のサブストリングのいずれかを確認してください)