どの値でも使用できる変数があります"SUBSCRIPT"
。"ITERATE"
"COUNTER"
これらのいずれかで変数をテストし、"SUBSCRIPT"
一致しない場合にデフォルト値に設定するにはどうすればよいですか?
コンパクトな形が欲しかったし、次のように思い出した。
[[ "${signal}" == "SUBSCRIPT" || "${signal}" == "ITERATE" ||
"${signal}" == "COUNTER" ]] || signal="SUBSCRIPT"
前述の作業は失敗しますか?
ベストアンサー1
あなたのコードは働く、同じ種類のタスクを書くためのいくつかのきちんとした方法があります。
最初の方法はすべてのPOSIXシェルで動作し、標準case
ステートメントを使用します。
case $signal in
SUBSCRIPT|ITERATE|COUNTER)
# do nothing
;;
*)
signal=SUBSCRIPT
esac
このステートメントは、3つの値のうちの1つがすでに存在する場合を除き、case
変数の値を文字列に設定します。SUBSCRIPT
SUBSCRIPT
ITERATE
COUNTER
次のように1行に書き込むことができます。
case $signal in (SUBSCRIPT|ITERATE|COUNTER) ;; (*) signal=SUBSCRIPT; esac
if
以下では、より簡潔なステートメントを使用することもできますbash
。
if [[ $signal != @(SUBSCRIPT|ITERATE|COUNTER) ]]; then
signal=SUBSCRIPT
fi
または、該当する場合は段落評価を使用します。
[[ $signal == @(SUBSCRIPT|ITERATE|COUNTER) ]] || signal=SUBSCRIPT
これは、拡張されたグローブパターンを使用して、変数の値が上記の3つの値のいずれかに一致するかどうかをテストします(構文はシェルから継承されますksh
)。その場合いいえmatch(テストはコードの最初のバリエーションとは反対です。2番目のバリアントで||
使用されます)、変数の値は文字列にリセットされますSUBSCRIPT
。