4つの変数のうちの1つが文字列 "&red"で始まることを確認し、一致するものが機能するようにします。現在私はこれを持っています。
if [[ $filemsgCICS = "&red"* || $filemsgCICSU1 = "&red"* || $snufmsgCICS = "&red"* || $snufmsgCICSU1 = "&red"* ]];then
しかし、これはうまくいきません。効果的な解決策が見つからないようです。 '&red'*と\&red*を試しましたが、どちらも機能しません。
答え1
${variable:offset:length} 構文を使用して、次のように変数の一部を取得できます。
if [[ ${filemsgCICS:0:4} = "&red" || ${filemsgCICSU1:0:4} = "&red" || \
${snufmsgCICS:0:4} = "&red" || ${snufmsgCICSU1:0:4} = "&red" ]]; then
編集する:*が[[]]と一致しないという意見が間違っています。変数に期待されるテキストが含まれている場合でも、アプローチは機能するはずです。だからこれは単なる選択肢です。
答え2
awk
andループを使用できますfor
。
matched=0
for var in "$filemsgCICS" "$filemsgCICSU1" "$snufmsgCICS" "$snufmsgCICSU1";do
if [ ! -z "$(printf "%s\n" "$var" | awk '/^\&red/')" ]; then
matched=1
break
fi
done
if [ "$matched" -eq 1 ]; then
# do stuff...
fi
これは、最初の一致変数でループを中断し、論理ORセマンティクスを実装します。awk
次のようなものを使用してこれを達成することもできます。
if [ ! -z "$(printf "%s\n" "$filemsgCICS" | awk ...)" ]\
|| [ ! -z "$(printf "%s\n" "$filemsgCICSU1" ...
しかし、私の考えでは、ループを使用すると読みやすく、メンテナンスも簡単になります。