誰かがシェルスクリプトでこれが何を意味するのかを説明できますか?
while read -r line
do
if [ "${line#*'Caused By'}" != "$line" ]; then
echo "Yes"
fi
done
ベストアンサー1
${line#*'Caused By'}
変数置換の特定のインスタンスです${parameter#word}
(bash
マニュアルに記録されているように)。POSIX規格ではsh
シェルの場合)。
では、値の先頭から${parameter#word}
パターンが削除されます。削除するため、「最小プレフィックスパターンの削除」と呼ばれます。word
$parameter
最短word
(のパターンに一致する一致するプレフィックス文字列で置き換えることによって##
削除#
されます。最長プレフィックス文字列と一致)。
この特定の例では、文字列Caused by
(およびそれ以前のすべての項目*
)がある場合は値から削除されます$line
。文字列の周りの一重引用符は重複しています。
置換結果を変数自体の値と比較し、テキストがある場合は印刷して、決定された値にテキストが$line
含まれているかどうかをテストします。Caused by
Yes
これは次のような効果があります。
if [[ "$line" == *'Caused by'* ]]; then
echo 'Yes'
fi
bash
、またはksh93
、zsh
または
case "$line" in
*'Caused by'*) echo 'Yes'
esac
どんなsh
殻でも。
質問のループは標準入力から「ライン」を読みます。質問参照」「IFS=read-r-line」を理解する 「これについて話し合ってください。