配列内の各項目のサブストリングを確認してください。

配列内の各項目のサブストリングを確認してください。

コマンドの出力に基づいて配列を作成しています。出力の各行は配列の項目です。次に各項目を繰り返し、特定の文字シーケンスをテストします。

#!/bin/bash

readarray -t LST < <(#read in single or multiline output from command)
d="sometext:123"
SUBS=":$(echo $d | cut -d':' -f 2)"
for i in "${LST[@]}"
do
  if [[ $i == *"$SUBS"* ]]
  then
    #save $i in new variable
    exit 0
  fi
done
echo "no match"
exit 1

問題は$ SUBS変数に関連しているようです。上記に基づいて$ SUBSをエコーすると123が出力されますが、比較結果は明らかにfalseを返します。 SUBSを次のように記入すると:

SUBS=":123"

比較は予想通りのようです。私が試した$ SUBSを埋める別の方法を使用すると、比較結果はfalseのようです。問題は、$dに正確に「:123」が含まれない可能性があることです。 ":456" または : 先行する他の数字にすることができます。

ベストアンサー1

Jeff Schallerが提案したようにset -xを使用すると(上記の説明を参照)、出力に/ bin / bash = / bin / kshに似た行が見つかりました。これにより、私が検索していた内容をGoogleにbashの代わりにkshを使用するようになりました。私は次の記事を見ました:

Unixシェルスクリプトで文字列に他の文字列が含まれているかどうかを確認する方法

許可された回答に基づいて、if行を次のように変更しました。

if test "${i#*$SUBS}" == "$i"

これは私が経験していた問題を解決するようです。

おすすめ記事