部分文字列は正しく一致するbashスクリプトです。

部分文字列は正しく一致するbashスクリプトです。

ファイル名とファイルに含まれる文字列を含むbashスクリプトがあり、ファイルの部分文字列をファイル名(tar.gz)と比較して一致することを確認します。

substr=$(echo "$(cat /home/user/configrc | grep Version)" | cut -d '_' -f4-5)
xfile="/home/user/data_1806_01.tar.gz"
echo $substr
echo $xfile
echo "Is $substr in $xfile"

if [ "$xfile" == *"$substr"* ]; then echo "Match"; else echo "No Match"; fi

出力は次のとおりです

DD_DATA_AB_1806_01
1806_01
/home/user/data_1806_01.tar.gz
 in /home/user/data_1806_01.tar.gz
No Match

一致が見つかりません。 1806_01 は、DD_DATA_AB_1806_01 に部分文字列一致がなければなりません。また、奇妙なことに、echo "Is $ substr in $ xfile"行が正しく印刷されません。 - 「Is $ substr」または「Is 1806_01」がありません。

substrの末尾に何らかの終了が必要ですか?

configrc ファイルには Version=DD_DATA_AB_1806_01 行が含まれています。

私はオンラインで多くの例を見ましたが、私が間違っているかどうかはわかりません...本当に簡単な質問です...

非常にありがとう:)

セントース7.2

ベストアンサー1

コメントで述べたように、文字列echoとtoは必要ありません。このタイプの比較には2つの括弧が必要です。catgrep

substr=$(grep 'Version' /home/user/configrc | cut -d '_' -f4-5)
xfile="/home/user/data_1806_01.tar.gz"

if [[ "$xfile" == *"$substr"* ]]; then
  echo "Match"
else
  echo "No Match"
fi

おすすめ記事