
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