/usr/bin/[ とは何ですか? また、どのように使用しますか?

/usr/bin/[ とは何ですか? また、どのように使用しますか?

coreutils を調べていたところ、coreutils の一部として含まれているファイルの 1 つとしてこれを見つけました: /usr/bin/[。これは何で[、何をするのでしょうか?

これは実行ファイルです。ただ、それが何をするのか、どのように使用するのかが分かりません。

$ file /usr/bin/[  
/usr/bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared  libs), for GNU/Linux 2.6.15, stripped  

実行しようとすると、実際にファイルを実行するのではなく、bash に組み込まれた行拡張がデフォルトになっていると思います。

$ "/usr/bin/["
/usr/bin/[: missing ‘]’
$ /usr/bin/\[
/usr/bin/[: missing ‘]’

答え1

これは コマンド と同等ですtest。( を参照してくださいinfo test。) 一般的に、スクリプトでは次のような条件式で使用します。

if [ -n "$1" ]; then
    echo $1
fi

条件を囲むには閉じ括弧が必要です。(まあ、コード内で見栄えを良くするために必要であるように見えます。他に実用的な理由を知っている人はいますか?)

答え2

これはコマンドと同等ですtest

の代わりに

if /usr/bin/test -z "$VAR"
then
    echo VAR not set
fi

以下を使用できます:

if /usr/bin/[ -z "$VAR" ]
then
    echo VAR not set
fi

ループ内でも使用できます:

i=0
while [ $i -lt 10 ]
do
   echo $i
   ((i++))
done

次のようにワンライナーで使用することもできます。

[ -z "$VAR" ] && echo VAR not set && exit

[ -f foo.txt ] && cat foo.txt

関連情報