Що таке / usr / bin / [і як я ним користуюся?


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
man [працює на ОС X.
Даніель Бек

Відповіді:


33

Це еквівалент команди test. (Див info test.) Ви, як правило, використовуєте його в скриптах в умовних виразах, таких як:

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

Кронштейн, що закривається, необхідний для укладання умовного. (Ну, схоже, що потрібно просто виглядати приємніше в коді. Хтось знає якусь іншу практичну причину для цього?)


3
Слід зазначити , що [це , як оболонка вбудованої і зовнішня програма з тим же (або подібним) використанням. У bash, коли ви запускаєте [або testви викликаєте вбудований.
grawity

Це потрібно, тому що якби це було необов'язково, синтаксис був би неоднозначним у певних ситуаціях.
Випадково832

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

2
приємні приклади, як ним користуватися. "if / usr / bin / ["
nelaaro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.