私ははるかに大きな文字列の小さな文字列をgrepしようとしています。両方の文字列は変数として保存されており、コード例は次のとおりです。
#!/bin/bash
long_str=$(man man)
shrt_str="guide"
if grep -q $shrt_str $long_str ; then
echo "Found it!"
fi
変数拡張が期待どおりに機能しているとは思わない。私が試してみました [ ]
および[[ ]]
、変数を引用し、出力を/dev/null
しかし、私が何をしても、それは動作しません。
誰にもアイデアはありますか?
if echo "$long_str" | grep -q "$shrt_str";then
echo "found"
fi
または
echo "$long_str" | grep -q "$shrt_str" && echo "found" || echo "not found"
ただし、bashシェルを使用しているため、シェル内部を使用します。外部コマンドを呼び出す必要はありません
shrt_str="guide"
case "$long_str" in
*"$shrt_str"* ) echo "Found";;
* ) echo "Not found";;
esac
grepはファイルまたは標準入力用です。変数を標準入力として使用する場合は、bashのヒアストリング表記を使用する必要があります。
if grep -q "$shrt_str" <<< "$long_str" ; then
あなたが欲しい
if echo $long_str | grep -q $shrt_str; then
別のBash固有の手法:
if [[ $long =~ $short ]] # regex match
then
echo "yes"
fi
ただし、変数に長い文字列が必要ない場合:
if man man | grep $short; then ...
しかし、私はそれが単に例を示す目的のためであると仮定しています。