26

Я посмотрел на coreutils и обнаружил, что это один из файлов, включенных в состав coreutils: /usr/bin/[ . Что такое [ и что оно делает?

Это исполняемый файл. Я просто не знаю, что он делает или как его использовать.

$ file /usr /bin /[
/usr /bin /[: исполняемый ELF 32-разрядный LSB, Intel 80386, версия 1 (SYSV), динамически связанный (использует разделяемые библиотеки), для GNU /Linux 2.6.15, раздетый

Когда я пытаюсь запустить его, я думаю, что по умолчанию используется bash, встроенный в расширение строки. Вместо того, чтобы фактически запустить файл.

$ "/usr/bin/["
/usr/bin/[: отсутствует ]' $ /usr/bin/\[
/usr/bin/[: missing
] '

2 ответа2

33

Это эквивалент командного test . (Смотрите info test .) Обычно вы используете его в скриптах в условных выражениях, таких как:

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

Закрывающая скобка обязательна для включения условного выражения. (Ну, похоже, это просто нужно, чтобы в коде выглядело лучше. Кто-нибудь знает какие-либо другие практические причины для этого?)

20

Это эквивалентно 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .