Apa itu / usr / bin / [dan bagaimana cara menggunakannya?


26

Saya melihat coreutils dan menemukan ini sebagai salah satu dari file dimasukkan sebagai bagian dari coreutils: /usr/bin/[. Apa itu [dan apa fungsinya?

Ini adalah executable. Saya hanya tidak tahu apa fungsinya atau bagaimana menggunakannya.

$ file / usr / bin / [
/ usr / bin / [: ELF 32-bit LSB dapat dieksekusi, Intel 80386, versi 1 (SYSV), ditautkan secara dinamis (menggunakan shared libs), untuk GNU / Linux 2.6.15, dilucuti

Ketika saya mencoba menjalankannya, saya pikir itu adalah default untuk bash built in expansion line. Alih-alih benar-benar menjalankan file.

$ "/ usr / bin / ["
/ usr / bin / [: missing ] ']' $ /usr/bin/\[
/usr/bin/[: missing



2
man [bekerja pada OS X.
Daniel Beck

Jawaban:


33

Ini setara dengan perintah test. (Lihat info test.) Secara umum Anda menggunakannya dalam skrip dalam ekspresi bersyarat seperti:

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

Braket penutup diperlukan untuk melampirkan kondisional. (Yah, sepertinya diperlukan hanya agar terlihat lebih bagus dalam kode. Apakah ada yang tahu alasan praktis lain untuk itu?)


3
Perhatikan bahwa [adalah baik shell built-in dan program eksternal dengan penggunaan yang sama (atau serupa). Di bash, ketika Anda menjalankan [atau testAnda memohon built-in.
grawity

Ini diperlukan karena jika itu opsional, sintaksinya akan ambigu dalam situasi tertentu.
Random832

20

Itu sama dengan testperintah.

Dari pada

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

Anda dapat gunakan:

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

Ini dapat digunakan dalam loop juga:

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

Anda juga dapat menggunakannya dalam satu baris seperti ini:

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

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

2
contoh yang bagus tentang bagaimana menggunakannya. "if / usr / bin / ["
nelaaro
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.