ifで[]演算子を使用しない場合と時期はいつですか?

ifで[]演算子を使用しない場合と時期はいつですか?
#!/bin/bash
echo 'Want Task 1'
read r1 ;
if [ echo "${r1}" | grep -iq "^y" ] ; then
    echo 'Task One Done'

    echo 'Want Task 2 ??'
    read r101
    if [ echo "${r101}" | grep -iq "^y" ] ; then 
        echo 'Task 2 Done'
    fi
fi

上記のコードを実行するとエラーが発生します。

[:`]' grep: ]: そのファイルやディレクトリはありません。

[ただし、単に角括弧を省略すると、]コードは完全に実行されます。テストコマンドであることはわかりますが、[]いつ使用するのか、いつ使用しないのかわかりません。

[]また、「演算子」またはtest「コマンド」と呼ぶべきかどうかを明確にしてください。

参考として必要に応じて、GNOME端末でBashを使用してください。

ベストアンサー1

パイプを使用すると、コマンドが別のサブシェルで実行される可能性があるため、コマンド(および[grepの両方が不完全であるため(それぞれ期待どおりに機能しない)、エラーメッセージが表示されます。

プログラムの結果コードのみをテストしたい場合、または[ … ]使用する必要はありません。これらのコードを使用して、またはなどのtestより明示的な比較を実行するだけです。たとえば、正規表現を使用して高度な比較をしたい場合は、コマンドを使用できます。[ 1 -gt 2 ][ "$1" == "$2" ][[ … ]]テスト構造 そして正規表現の紹介「高度なバッシュスクリプトガイド」より

おすすめ記事